IO学习(十二)序列化和反序列化

来源:互联网 发布:打字拼音软件下载 编辑:程序博客网 时间:2024/05/16 17:01

反序列化:输入流 ObjectInputStream

序列化:输出流 ObjectOutputStream


注意:

1.先序列化再反序列化,反序列化顺序必须和序列化一致

2.不是所有的对象都可以序列化,自定义的类若想序列化必须实现java.io.Serializable

Serializable是一个空接口,标识类可以被序列化

3.不是所有的属性都需要序列化,不需要序列化的属性可以使用transient关键字



下面是代码示例


首先给出一个实现Employee类,有两个属性,名字和工资,其中名字是不可序列化的,工资可以

class Employee implements Serializable{private transient String name;private double salary;public Employee() {// TODO Auto-generated constructor stub}public Employee(String name, double salary) {super();this.name = name;this.salary = salary;}public String getName() {return name;}public double getSalary() {return salary;}public void setName(String name) {this.name = name;}public void setSalary(double salary) {this.salary = salary;}}



public class Demo09 {public static void main(String[] args) throws IOException, ClassNotFoundException {seri();unseri();}/** * 序列化,输出流 * @throws IOException */public static void seri() throws IOException{//new一个Employee对象Employee emp=new Employee("depp",1234);//目标文件,序列化的对象放在这里File dest=new File("F:/Picture/test/test.txt");//选择流ObjectOutputStream oos=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(dest)));oos.writeObject(emp);oos.flush();oos.close();}/** * 反序列,输入流 * @throws ClassNotFoundException  */public static void unseri() throws IOException, ClassNotFoundException{//存放已经序列化对象的文件File src=new File("F:/Picture/test/test.txt");//选择流ObjectInputStream ois=new ObjectInputStream(new BufferedInputStream(new FileInputStream(src)));Object obj=ois.readObject();//如果是Employee类的实例,则类型强转if(obj instanceof Employee){Employee emp=(Employee)obj;System.out.println(emp.getName()+" "+emp.getSalary());}ois.close();}}




可能之前写文件拷贝走火入魔了,在反序列化的文件地址中写了一个新地址,结果报错了,

java.io.StreamCorruptedException

这里一定要注意,反序列化一定要在序列化以后,并且对相同的一个文件进行写入读取操作

对象序列化以后是完全看不懂的,如下:(像“口”的那个符号出不来,忽视)

 sr IO.Employee憌y.鰓5 D salaryxp@揌  



0 0