JavaIO流-对象流

import org.junit.Test;

import java.io.*;

/**
 * 对象流
 * 序列化
 * 反序列化
 *
 *
 * 要求对象所属的类必须是可序列化的
 * 对象的序列化机制
 * 作用:用于存储和读取基本数据类型数据或对象的处理
 *
 * @author orz
 */
public class ObjectInputOutput {

    /**ObjectInputStream序列化
     * 序列化过程:将内存中的java对象保存到磁盘中或通过网络传输出去
     */
    @Test
    public void test1()throws IOException
    {


        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("object.dat"));
        oos.writeObject(new String("我爱北京天安门"));
        oos.flush();
        oos.writeObject(new Person("王明",23));
        oos.flush();
        oos.close();

    }

    /**
     * //ObjectOutputStream反序列化
     * 反序列化
     */
    @Test
    public void test2()
    {
        ObjectInputStream ois=null;
        try {
            ois=new ObjectInputStream(new FileInputStream("object.dat"));
            Object obj=ois.readObject();
            String str=(String)obj;
            System.out.println(str);

            Person p=(Person) ois.readObject();
            System.out.println(p);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                if (ois != null) {
                    ois.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}



//NotSerializableException
//要想一个java对象是可序列化的需要满足如下;要求
//1.该类必须实现接口Serializable
//2.提供一个全局常量:serialVersionUID
//3.除了当前,类需要实现Serializable接口之外,还必须保证其内部所有属性也必须是可序列化的(默认情况下,基本数据类型可序列化)

//补充:ObjectInputStream、ObjectOutputStream不能序列化static\transient修饰的成员
//标识接口

class Person implements Serializable
{
    public static final long serialVersionUID=4567894567L;
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", 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;
    }
}

猜你喜欢

转载自www.cnblogs.com/orzjiangxiaoyu/p/13399424.html