IO流 之 数据流 和 对象序列化

数据流

数据输出流(DataOutputStream):允许把一些数据和其类型一起写道文件中去。

IO流 之 数据流 和 对象序列化_第1张图片
代码使用:

package day0927;

import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.FileOutputStream;

public class demo14 {
    public static void main(String[] args) {
        try (DataOutputStream DOS = new DataOutputStream(
                new FileOutputStream("src/day0927/a.txt"))
        ) {
            int i = 1;
            double d = 1.9;
            String str = "你好数据流";
            DOS.writeBoolean(false);
            DOS.writeByte(97);
            DOS.writeInt(i);
            DOS.writeUTF(str);
            DOS.writeDouble(d);
        }catch (Exception e){
            e.printStackTrace();
        }

    }
}

存入文件中的数据:
IO流 之 数据流 和 对象序列化_第2张图片

数据输入流(DataInputStream):把存在文件中的数据读取出来

IO流 之 数据流 和 对象序列化_第3张图片
将刚才保存的数据读取出来(读取的时候一定要注意按照存储的顺序读取否则将报错):

package day0927;

import java.io.*;

public class demo15 {
    public static void main(String[] args) {
        try (DataInputStream DIS = new DataInputStream(
                new FileInputStream("src/day0927/a.txt"))
        ) {
            System.out.println(DIS.readBoolean());
            System.out.println(DIS.readByte());
            System.out.println(DIS.readInt());
            System.out.println(DIS.readUTF());
            System.out.println(DIS.readDouble());

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

    }
}

读取数据展示:
IO流 之 数据流 和 对象序列化_第4张图片
注意点: 读取的时候一定要注意按照存储的顺序读取否则将报错

对象序列化

ObjectOutputStream(对象字节输出流)可以将对象输出保存到文件中。

IO流 之 数据流 和 对象序列化_第5张图片
代码演示:

package day0927;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class demo16 {
    public static void main(String[] args) {
        try (ObjectOutputStream OOS = new ObjectOutputStream(
                new FileOutputStream("src/day0927/b.txt"))
        ) {
            OOS.writeObject(new User("我是MT","123456",1,"男"));
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

运行效果:
在这里插入图片描述
注意点:对象如果要参与序列化,那么必须要实现序列化接口(Serializable)。

ObjectIntputStream(对象字节输入流)可以将对象输出保存到文件中。

IO流 之 数据流 和 对象序列化_第6张图片
代码:

package day0927;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class dome17 {
    public static void main(String[] args) {
        try (ObjectInputStream OIS  = new ObjectInputStream(
                new FileInputStream("src/day0927/b.txt"))
        ) {
            User o = (User) OIS.readObject();
            System.out.println(o);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

效果:
IO流 之 数据流 和 对象序列化_第7张图片
那么如果对象中的某个属性不需要序列化,则可以使用 transient 修饰此属性。

//使用transient 修饰此属性,这个属性将不会参与序列化。
private transient String password;

IO流 之 数据流 和 对象序列化_第8张图片
按住ctrl点击ArrayList可以看见它已经实现了Serializable接口,则可以将对象添加到ArrayList里面再对
ArrayList进行序列化保存即可。在这里插入图片描述

你可能感兴趣的:(IO流,java,开发语言,io,数据流,序列化)