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

数据流

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

在这里插入图片描述
代码使用:

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();
        }

    }
}

存入文件中的数据:
在这里插入图片描述

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

在这里插入图片描述
将刚才保存的数据读取出来(读取的时候一定要注意按照存储的顺序读取否则将报错):

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();
        }

    }
}

读取数据展示:
在这里插入图片描述
注意点: 读取的时候一定要注意按照存储的顺序读取否则将报错

对象序列化

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

在这里插入图片描述
代码演示:

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(对象字节输入流)可以将对象输出保存到文件中。

在这里插入图片描述
代码:

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();
        }
    }
}

效果:
在这里插入图片描述
那么如果对象中的某个属性不需要序列化,则可以使用 transient 修饰此属性。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值