首页 > 代码库 > I/O(输入/输出)---序列化与反序列化

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(输入/输出)---序列化与反序列化