首页 > 代码库 > I/O、序列化
I/O、序列化
1)流序列化对象ObjectOutputStream调用writerObject写出序列化对象,ObjectInputStream调用readObject读取序列化对象,序列化的对象必须要实现Serializable接口,该接口没有任何需要待实现的方法,只需继承即可。序列化之前的对象和序列化之后的对象是两个不同的对象,两者不是相等的。
序列化代码样例:
//写出序列化 String path="G:\\obj.txt"; ObjectOutputStream stream=new ObjectOutputStream(new FileOutputStream(path)); stream.writeObject(student); stream.close(); // 读取序列化 ObjectInputStream inputStream=new ObjectInputStream(new FileInputStream(path)); Student student2=(Student)inputStream.readObject(); inputStream.close();
在序列化过程中,某些域(属性)不想被序列化,可以使用transient标记不被序列化(方法不适用transient),不可序列化的类作为一个属性表示的话一定要加上transient不然会报NotSerializableException。
例子:
private transient String _date;
方法标记transient报错 必须去掉transient标记。
2)使用Externalizable接口可以定制自己的序列化机制,此接口有两个公开的可重写的方法readExternal和writeExternal
代码样例:
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException { // TODO 自动生成的方法存根 ExternalDemo demo = new ExternalDemo(); demo.setName("zhangsan"); ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream( Paths.get("G:\\", "ExternalDemo.dat").toFile())); demo.writeExternal(out); ObjectInputStream in = new ObjectInputStream(new FileInputStream(Paths .get("G:\\", "ExternalDemo.dat").toFile())); demo.readExternal(in); System.out.println(demo.getName()); }
public class ExternalDemo implements Externalizable { private String _name; public String getName() { return _name; } public void setName(String name) { _name = name; } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { // TODO 自动生成的方法存根 _name = (String) in.readObject(); } @Override public void writeExternal(ObjectOutput out) throws IOException { // TODO 自动生成的方法存根 out.writeObject(_name); } }
I/O、序列化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。