序列化与反序列化
1.Serializable
- 类实现 Serializable
- 保存数据到本地磁盘
ObjectOutputStream oos= new ObjectOutputStream(new FileOutputStream("D:/test/wuqingvika0204.dat")); oos.writeObject(person); oos.close();
- 从本地加载并读取
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("D:/test/wuqingvika0204.dat")); Person person=(Person)ois.readObject(); ois.close(); return person;
- 不想被序列化的字段如何处理:
- 采用transient关键字来修饰字段即可。但它仅与Serializable配合使用。
2.Externalizable
- 类实现 Externalizable
- 需要实现两个方法:
@Override public void writeExternal(ObjectOutput out) throws IOException { out.writeObject(this.getName()); out.writeInt(this.getAge()); } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { this.setName((String)in.readObject());//这里位置不能颠倒 this.setAge( in.readInt()); }
- 其余序列化到本地磁盘和加载数据同上。
- 这里说下我遇到的坑:读取时候需要与写入字段顺序位置一致。不然报错。
- 另外,transient在这里使用无效。
网友评论