I/O(输入/输出)---序列化与反序列化

Posted fifiyong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了I/O(输入/输出)---序列化与反序列化相关的知识,希望对你有一定的参考价值。

 

概念:

  序列化就是将对象的状态存储到特定的介质中的过程,也就是将对象状态转换为可保持或传输格式的过程。

  反序列化则是从特定存储介质中将数据重新构建对象的过程。可以将存储在文件上的对象信息读取,然后重新构建为对象。

 

过程:

  将对象的公有成员、私有成员包括类名,转换为字节流---》写入数据流---》存储到存储介质中(文件)。

意义:

  将java对象序列化后,可以将其转换为自己序列,这样就可以保存在磁盘上,也可以借助网络进行传输。

  对象的保存是二进制状态,实现了平台的无关性。

import java.io.Serializable;
/*
 * Serializable:用于给被序列化的类加入ID号。
 * 用于判断类和对象是否是同一个版本。 
 */
//Person诶实现Serializable接口,代表这个类可被序列化
public class Person implements Serializable/*标记接口*/ {

    /**
     * transient:非静态数据不想被序列化可以使用这个关键字修饰。 
     */
    private static final long serialVersionUID = 9527l;
    private transient String name;
    private static int age;
    
    
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
}

 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import cn.itcast.io.p2.bean.Person;

public class ObjectStreamDemo {

    /**
     * @param args
     * @throws IOException 
     * @throws ClassNotFoundException 
     */
    public static void main(String[] args) throws IOException, ClassNotFoundException {
            
//        writeObj();
        readObj();
    }

    public static void readObj() throws IOException, ClassNotFoundException {
        //ObjectInputStream 对象输入流
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.object"));
        //对象的反序列化。需要类型转换。 
        Person p = (Person)ois.readObject();
        
        System.out.println(p.getName()+":"+p.getAge());
        
        ois.close();
        
    }

    public static void writeObj() throws IOException, IOException {
        //ObjectInputStream 对象输出流
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.object"));
        //对象序列化。  被序列化的对象必须实现Serializable接口。 
        oos.writeObject(new Person("小强",30));
        
        oos.close();
        
        
        
    }

}

 

以上是关于I/O(输入/输出)---序列化与反序列化的主要内容,如果未能解决你的问题,请参考以下文章

Java I/O - 对象的输入输出与序列化

I/O流,标准输入输出流,序列反序列,线程,进程概念

不用怀疑!这就是把Java.I/O流讲解的最清楚的一篇文章

不用怀疑!这就是把Java.I/O流讲解的最清楚的一篇文章

IO流相关知识(File,字节流,字符流,特殊操作流(标准输入流,标准输出流,对象序列化与反序列化,properties与IO流结合))相关知识总结

Java IO详解(六)------序列化与反序列化(对象流)