JAVA——数据流、序列化流

 

目录

一、DataOutputStream(数据输出流) 

 二、DataInputStream(数据输入流)

 三、序列化流

1.1 ObjectOutputStream(对象字节输出流)

 1.2 OutputStream(对象字节输入流)

四、补充


 

 

一、DataOutputStream(数据输出流) 

1. 作用:允许把数据和其类型一并写出去

public static void main(String[] args) {
        try (
                //1. 创建一个数据输出流包装低级字节输出流
                DataOutputStream dos = new DataOutputStream(new FileOutputStream("E:\\developcode\\javacode\\javabase\\src\\com\\IO\\shuju\\test1.txt"));

        ){
            dos.writeByte('a');
            dos.writeInt(97);
            dos.writeDouble(99.2);
            dos.writeBoolean(false);
            dos.writeUTF("明天会更好");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

 二、DataInputStream(数据输入流)

1. 作用: 用于读取数据输出流写出去的数据

public static void main(String[] args) {
        try (
                DataInputStream dis = new DataInputStream(new FileInputStream("文件地址"));

        ){
            //要按照写入的顺序来读取
            System.out.println(dis.readByte());
            System.out.println(dis.readInt());
            System.out.println(dis.readDouble());
            System.out.println(dis.readBoolean());
            System.out.println(dis.readUTF());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 三、序列化流

 1. 对象序列化:把java对象写入到文件中去

2. 对象反序列化:把文件里的java对象读出来

1.1 ObjectOutputStream(对象字节输出流)

1. 作用:可以把Java对象进行序列化,把Java对象存入到文件中去

注意:对象如果要参与序列化,必须实现序列化接口(java.io.Serializable) 

public static void main(String[] args) {
        try (
                ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("文件地址"));

        ){
            //1. 创建一个Java对象
            User u = new User("admin","董小姐",30,"nanshangnan");
            //序列化对象到文件中去
            oos.writeObject(u);
            System.out.println("对象序列化成功!");

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

 1.2 OutputStream(对象字节输入流)

1. 作用:可以把Java对象进行反序列化:把存储在文件中的Java对象读入到内存中来 

创建一个User对象

private String loginName;
private String userName;
private int age;
//transient 是让passWord 不被序列化的
private transient String passWord;

序列化 

public static void main(String[] args) {
        try (
                ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("文件地址"));

        ){
            //1. 创建一个Java对象
            User u = new User("admin","董小姐",30,"nanshangnan");
            //序列化对象到文件中去
            oos.writeObject(u);
            System.out.println("对象序列化成功!");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

反序列化 

public static void main(String[] args) {
        try (
                ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:\\developcode\\javacode\\javabase\\src\\com\\IO\\xuliehua\\test1.txt"));

        ){
            User u = (User) ois.readObject();
            System.out.println(u);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

四、补充

如果要一次序列化多个对象,咋整?
用一个ArrayList集合存储多个对象,然后直接对集合进行序列化即可注意:ArrayList集合已经实现了序列化接口!

明天实践一下吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值