<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    tbwshc

    關(guān)于Java序列化的一些高級(jí)用法

    該說(shuō)的都在注釋中說(shuō)完了。直接給程序吧。
      [java] view plaincopyprint?
      package test.javaPuzzler.p5;
      import java.io.*;
      import java.io.ObjectInputStream.GetField;
      import java.io.ObjectOutputStream.PutField;
      // 轉(zhuǎn)載請(qǐng)注明來(lái)自http://blog.csdn.net/sunxing007
      // 一個(gè)類實(shí)現(xiàn)Serializable來(lái)表明自己可以被序列化;
      // 有一點(diǎn)需要特別注意的是:
      // 如果子類實(shí)現(xiàn)了Serializable,而父類沒有,則父類不會(huì)被序列化;
      public class SerializableObject implements Serializable {
      // 生成的序列化版本號(hào)會(huì)因?yàn)榫幾g環(huán)境,聲明的類名,成員名稱和數(shù)量的變化而不同;
      // 也就是說(shuō)這個(gè)版本號(hào)一定程度上記錄著類的定義性的信息,如果類的定義變化了,最好重新生成版本號(hào);
      // 如果新的代碼使用了舊的版本號(hào),則在反序列化的時(shí)候,可以兼容讀取舊類的字節(jié)碼而不會(huì)報(bào)錯(cuò);
      private static final long serialVersionUID = 9038542591452547920L;
      public String name;
      public String password;
      // 如果你不希望某個(gè)非靜態(tài)成員被序列化,可以用transient來(lái)修飾它;
      public transient int age;
      // 靜態(tài)成員不會(huì)被序列化,因?yàn)樾蛄谢4娴氖菍?shí)例的狀態(tài)信息,而靜態(tài)成員是類的狀態(tài)信息;
      public static int version = 1;
      public SerializableObject(String name, String password) {
      this.name = name;
      this.password = password;
      }

    // 每個(gè)類可以寫一個(gè)writeObject方法,這個(gè)方法將會(huì)負(fù)責(zé)該類自身的序列化過(guò)程;
      // 比如對(duì)于敏感信息如password,可以加密之后再序列化;
      // 這個(gè)過(guò)程需要用到PutField,它可以指定哪些域會(huì)被序列化,怎么序列化(比如加密);
      // 如果沒有定義這個(gè)方法,將會(huì)調(diào)用ObjectOutputStream 的 defaultWriteObject;
      // 你可以注釋掉readObject方法,然后運(yùn)行測(cè)試用例來(lái)測(cè)試密碼是否被加密;
      private void writeObject(ObjectOutputStream out) throws IOException {
      PutField putFields = out.putFields();
      putFields.put("name", name);
      // 模擬加密密碼
      putFields.put("password", "thePassword:" + password);
      out.writeFields();
      }
      // 每個(gè)類可以寫一個(gè)readObjectb方法,該方法負(fù)責(zé)該類自身的反序列化過(guò)程;
      // 比如對(duì)序列化時(shí)加密后的密碼解密;
      // 這個(gè)過(guò)程需要用到GetField,他可以具體地讀取每個(gè)域;或執(zhí)行解密動(dòng)作等等;
      // 如果沒有定義這個(gè)方法,將會(huì)調(diào)用ObjectInputStream 的 defaultReadObject;
      private void readObject(ObjectInputStream in)
      throws ClassNotFoundException, IOException {
      GetField readFields = in.readFields();
      // 讀取到成員的值之后,直接賦給該域,即完成該域的反序列化;
      name = (String) readFields.get("name", "defaultName");
      // 模擬解密密碼
      String encPassword = (String) readFields.get("password",
      "thePassword:defaultValue");
      password = encPassword.split(":")[1];
      }
      // 序列化
      // 主要用到ObjectOutputStream;
      public void save() throws IOException {
      FileOutputStream fout = new FileOutputStream("e:obj");
      ObjectOutputStream oout = new ObjectOutputStream(fout);
      oout.writeObject(this);
      oout.close();
      fout.close();
      }
      // 反序列化
      // 主要用到ObjectInputStream
      public static SerializableObject load() throws IOException,
      ClassNotFoundException {
      FileInputStream fin = new FileInputStream("e:obj");
      ObjectInputStream oin = new ObjectInputStream(fin);
      Object o = oin.readObject();
      return (SerializableObject) o;
      }
      @Override
      public String toString() {
      return "name: " + name + ", password: " + password;
      }
      // tb測(cè)試用例
      public static void main(String[] args) throws IOException,
      ClassNotFoundException {
      SerializableObject so = new SerializableObject(
      "http://blog.csdn.net/sunxing007", "123456");
      so.save();
      System.out.println(so);
      System.out.println(SerializableObject.load());
      }
      }

    posted on 2013-06-17 16:50 chen11-1 閱讀(153) 評(píng)論(0)  編輯  收藏

    主站蜘蛛池模板: 国产亚洲精品美女2020久久| 久久青青草原亚洲AV无码麻豆 | 苍井空亚洲精品AA片在线播放| 亚洲另类春色校园小说| 中文字幕亚洲综合久久2| 国产亚洲精品资源在线26u| 亚洲另类激情综合偷自拍图| 中文亚洲AV片不卡在线观看| 亚洲欧洲精品无码AV| 亚洲成AV人片一区二区| 亚洲日本中文字幕| 久久综合亚洲鲁鲁五月天| 亚洲国产美女精品久久久久| 成年轻人网站色免费看| 18禁超污无遮挡无码免费网站国产| 国国内清清草原免费视频99| 国产精品久久久久久久久久免费 | 免费无遮挡无码视频在线观看 | 亚洲人xxx日本人18| 亚洲中文无码永久免费| 亚洲GV天堂GV无码男同| 美女18毛片免费视频| aa级毛片毛片免费观看久| 久久久久国产精品免费网站| 成人浮力影院免费看| 天天摸夜夜摸成人免费视频| 蜜桃精品免费久久久久影院| 亚洲AV无码成人精品区大在线| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 亚洲精品无码中文久久字幕| 美女露100%胸无遮挡免费观看| 在线视频网址免费播放| 99热这里只有精品免费播放| 欧美a级在线现免费观看| 国产免费av片在线无码免费看| 国产成人亚洲精品影院| 老汉色老汉首页a亚洲| 亚洲精品无码成人| 中国人免费观看高清在线观看二区| 3d成人免费动漫在线观看| 日韩高清免费在线观看|