java语言基础(86)——序列化流和反序列化流
2017-09-11 22:53
357 查看
ObjectOutputStream 序列化流
ObjectInputStream 反序列化流
ObjectOutputStream 可以将java对象转换成流,写入文件,或在网络中传输,而ObjectInputStream 则可以将流还原成对象,这样就可以在另一台主机或另一个进程中重构该对象。
注意:只能将实现了java.io.Serializable接口的对象进行序列化和反序列化。
例如:
package ObjectInputOutputDemo;
import java.io.Serializable;
public class Person implements Serializable{
private static final long serialVersionUID = -5057353540453867508L;
private String name;
private int age;
public Person(){
}
public Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
}
上述两段代码放进同一个包中的两个文件中,就可以演示序列化与反序列化的过程。代码演示了Person对象的序列化与反序列化过程。
注意:
serialVersionUID的作用:
如果序列化对象后,又改动了类的成员,而没有重新序列化,这时,直接反序列化会报错,而我们在Person类中加入
serialVersionUID,便可解决此问题。
transient 关键字控制成员不被序列化:
被transient关键字修饰后的成员属性,在序列化的时候,不会被记住。所以在重新反序列化的时候,也不会读取到该成员的值。
例如: private transient int age;
ObjectInputStream 反序列化流
ObjectOutputStream 可以将java对象转换成流,写入文件,或在网络中传输,而ObjectInputStream 则可以将流还原成对象,这样就可以在另一台主机或另一个进程中重构该对象。
注意:只能将实现了java.io.Serializable接口的对象进行序列化和反序列化。
例如:
package ObjectInputOutputDemo;
import java.io.Serializable;
public class Person implements Serializable{
private static final long serialVersionUID = -5057353540453867508L;
private String name;
private int age;
public Person(){
}
public Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
}
package ObjectInputOutputDemo; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class ObjectInputOutputDemo { public static void main(String[] args) throws IOException, ClassNotFoundException { Person p = new Person("xiaoming",30); write(p); read(); } private static void write(Object obj) throws IOException{ ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream("E:\\oos.txt")); // 将对象写入文件 序列化 oos.writeObject(obj); oos.close(); } private static void read() throws IOException, ClassNotFoundException{ ObjectInputStream ois = new ObjectInputStream( new FileInputStream("E:\\oos.txt")); // 将对象从文件读出 反序列化 Person p = (Person) ois.readObject(); System.out.println(p.getName());// xiaoming ois.close(); } }
上述两段代码放进同一个包中的两个文件中,就可以演示序列化与反序列化的过程。代码演示了Person对象的序列化与反序列化过程。
注意:
serialVersionUID的作用:
如果序列化对象后,又改动了类的成员,而没有重新序列化,这时,直接反序列化会报错,而我们在Person类中加入
serialVersionUID,便可解决此问题。
transient 关键字控制成员不被序列化:
被transient关键字修饰后的成员属性,在序列化的时候,不会被记住。所以在重新反序列化的时候,也不会读取到该成员的值。
例如: private transient int age;
相关文章推荐
- Java基础知识强化之IO流笔记65:序列化流 和 反序列化流
- 黑马程序员——Java语言基础组成
- [转] Java基础知识——Java语言基础
- Java基础知识-Java语言基础
- java基础总结之java对象的序列化和反序列化
- Java_Web三大框架之Hibernate+HQL语言基础
- Java基础--->01.计算机软件及Java语言的背影和发展历史,以及环境变量配置。
- Java语言基础-常用对象API(二)泛型、Map集合
- Java语言基础long与float的取值范围谁大谁小
- 四道java语言练习基础题:
- Java语言基础-进制及原码补码反码
- Java基础学习总结——Java对象的序列化和反序列化
- 黑马程序员——Java语言基础——02.java语言基础组成(4)数组及常用排序方法
- Java语言基础-10.插入排序
- Java 语言程序设计基础篇原书第八版_第十二章_第八题_程序分享
- Java语言基础小结6
- 基础Java语言编程练习题
- java语言基础
- day04<Java语言基础+>