JAVA 输入输出 对象流(四)

1、对象流理解

  • ObjectInputStream 和 ObjectOutPutStream
  • 用于存储和读取基本数据类型数据或对象的处理流。强大:可以把java中的对象写入到数据源中,也能把数据从对象源中还原回来。
  • 序列化:用 ObjectInputStream 类保存基本数据类型或对象的机制
  • 反序列化:用ObjectOutPutStream 类读取基本数据类型或对象的机制
  • ObjectInputStream 和 ObjectOutPutStream 不能序列化 static 和 transient 修饰的成员变量。

2、对象的序列化

简单理解:允许把内存中java对象转化成与平台无关的二进制流,从而允许把这种二进制流持久的保存在磁盘上,或通过网络将二进制流传输到另一个网络节点。当其他程序获取了这种二级制流,就可以恢复原来的java 对象。

序列化的好处在于可将任何实现了Serializable 接口的对象转化为字节数据,使其在保存和传输时可被还原。
序列化是RMI(Remote Method Invoke - 远程方法调用)过程的参数和返回值都必须实现的机制,而RMI 是java EE 的基础。序列化机制是java 平台的基础。

如果需要让某个对象支持序列化机制,必须让该对象所属类及其属性是可序列化的,为了让某个类是可序列化的,则该类必须实现以下两个接口之一,否则会抛异常。

  • Serializable
  • Externalizable

在这里插入图片描述

3、代码实现序列化与反序列化

package test;

import org.junit.Test;

import java.io.*;

public class TestObjectStream {

    /**
     * 序列化过程
     */
    @Test
    public void test1(){
        ObjectOutputStream objectOutputStream = null;
        try {
            //1、造文件
            objectOutputStream = new ObjectOutputStream(new FileOutputStream("object.dat"));

            //2、流
            objectOutputStream.writeObject(new String(" 我 爱 工 作"));

            objectOutputStream.flush();//刷新操作
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (objectOutputStream != null) {
            try {
                //3、关闭流
                objectOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            }
        }
    }
   /**
     * 反序列化过程
     */
    @Test
    public void test2(){
        ObjectInputStream objectInputStream = null;
        try {
            //1、造文件
            //流
            objectInputStream = new ObjectInputStream(new FileInputStream("object.dat"));

            Object obj = objectInputStream.readObject();
            String str = (String) obj;
            System.out.println(str);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (objectInputStream != null) {

            try {
                //关闭流资源
                objectInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            }

        }

    }
}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值