IO流之对象流

对象流的使用

  • ObjectInputStream
    ObjectOutputStream

  • 作用:用于存储和读取基本数据类型数据或对象的处理流。它的强大之处就是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来

1、序列化ObjectOutputStream

将内存中的java对象保存到磁盘中或通过网络传输出去

 @Test
    public void test1(){
        ObjectOutputStream oos = null;
        try {
            //第一步
            oos = new ObjectOutputStream(new FileOutputStream("object.dat"));

            //第二步
            oos.writeObject(new String("你好!"));
            oos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(oos != null)
                try {
                    //第三步
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
2、反序列化ObjectInputStream
@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);//你好!
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (ois != null)
                //第三步
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
3、自定义类的序列化和反序列化

自定义类需要满足如下的要求,方可序列化
1、需要实现接口:Serializable
2、需要当前类提供一个全局常量:public static final long serialVersionUID
3、除了当前类需要实现Serializable接口外,还必须保证其内部所有属性也必须是可序列化的。(默认情况下, 基本数据类型可序列化)

补充:ObjectOutputStreamObjectInputStream不能序列化statictransient修饰的成员变量(如果不想让类中的某个成员变量序列化,加个transient

 @Test
    public void test3(){
        ObjectOutputStream oos = null;
        try {
            //第一步
            oos = new ObjectOutputStream(new FileOutputStream("object.dat"));

            //第二步
            oos.writeObject(new Person("fhz",21));
            oos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(oos != null)
                try {
                    //第三步
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }

    @Test
    public void test4(){
        //第一步
        ObjectInputStream  ois = null;
        try {
            ois = new ObjectInputStream(new FileInputStream("object.dat"));

            //第二步
            Object obj1 = ois.readObject();
            Person p1 = (Person)obj1;
            System.out.println(p1);//Person{name='fhz', age=21}
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (ois != null)
                //第三步
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容