IO流——其他流

DataOutputStream(数据输出流)

  • 允许把数据和其类型一并写出去
构造器说明
public DataOutputStream(OutputStream out)创建新数据输出流包装基础的字节输出流
方法说明
public final void writeByte​(int v) throws IOException将byte类型的数据写入基础的字节输出流
public final void writeInt​(int v) throws IOException将int类型的数据写入基础的字节输出流
public final void writeDouble(Double v) throws IOException将double类型的数据写入基础的字节输出流
public final void writeUTF(String str) throws IOException将字符串数据以UTF-8编码成字节写入基础的字节输出流
public void write(int/byte[]/byte[]一部分)支持写字节数据出去

DataInputStream(数据输入流)

  • 用于读取数据输出流写出去的数据
构造器说明
public DataInputStream(InputStream is)创建新数据输入流包装基础的字节输入流
方法说明
Public final byte readByte​() throws IOException读取字节数据返回
public final int readInt​() throws IOException读取int类型的数据返回
public final double readDouble() throws IOException读取double类型的数据返回
public final String readUTF() throws IOException读取字符串数据(UTF-8)返回
public int readInt()/read(byte[])支持读字节数据进来

演示1:DataOutputStream(数据输出流)

public class DataOutputStreamTest {
    public static void main(String[] args) {
        try (
                // 创建一个数据输出流包装低级的字节输出流
                DataOutputStream dos = new DataOutputStream(new FileOutputStream("oop3\\src\\com\\ligemanyin\\_IO\\DataStream\\DataOut.txt"));
        ) {
            dos.writeInt(100);
            dos.writeDouble(100.0);
            dos.writeBoolean(true);
            dos.writeByte((byte) 100);
            dos.writeChar('a');
            dos.writeShort((short) 100);
            dos.writeLong(1000000000000000000L);
            dos.writeFloat(100.0f);
            dos.writeUTF("hello world");
            // DataOutputStream写出的数据不支持预览,仅支持DataInputStream读入
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

演示2:DataInputStream

public class DataInputStreamTest {
    public static void main(String[] args) {
        try (
                DataInputStream dis = new DataInputStream(new FileInputStream("oop3\\src\\com\\ligemanyin\\_IO\\DataStream\\DataOut.txt"));
        ) {
            // 按照写入数据类型逐个读取
            int  i = dis.readInt();
            System.out.println(i);

            double d = dis.readDouble();
            System.out.println(d);

            boolean bol = dis.readBoolean();
            System.out.println(bol);

            byte b = dis.readByte();
            System.out.println(b);

            char c = dis.readChar();
            System.out.println(c);

            short s = dis.readShort();
            System.out.println(s);

            long l = dis.readLong();
            System.out.println(l);

            float f = dis.readFloat();
            System.out.println(f);

            String str = dis.readUTF();
            System.out.println(str);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


序列化流

ObjectOutputStream(对象字节输出流)

  • 可以把Java对象进行序列化:把Java对象存入到文件中去
构造器说明
public ObjectOutputStream(OutputStream out)创建对象字节输出流,包装基础的字节输出流

方法|说明
public final void writeObject(Object o) throws IOException|把对象写出去

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

ObjectInputStream(对象字节输入流)

  • 可以把Java对象进行反序列化:把存储在文件中的Java对象读入到内存中来
构造器说明
public ObjectInputStream(InputStream is)创建对象字节输入流
方法说明
public final Object readObject()把存储在文件中的Java对象读出来

注:如果想让某个成员变量不参与反序列化(如密码字段),可在该变量前声明 transient

演示1:对象序列化

实例类自行设计

public class ObjectOutputStreamTest {
    public static void main(String[] args) {
        try (
                ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("oop3\\src\\com\\ligemanyin\\_IO\\ObjectStream\\ObjectOut.txt"));
        ) {
            User u = new User("李华", 18, "男", "上海");
            oos.writeObject(u);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

演示2:反序列化

public class ObjectInputStreamTest {
    public static void main(String[] args) {
        try (
                ObjectInputStream ois = new ObjectInputStream(new FileInputStream("oop3\\src\\com\\ligemanyin\\_IO\\ObjectStream\\ObjectOut.txt"));
        ) {
            User user = (User) ois.readObject();
            System.out.println(user.getName());
            System.out.println(user.getAge());
            System.out.println(user.getSex());
            System.out.println(user.getAddress());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 28
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

离歌慢饮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值