【Java I/O 流】数据输入输出流:DataInputStream 和 DataOutputStream

在这里插入图片描述

❤️ 个人主页:水滴技术
🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬
🌸 订阅专栏:Java 教程:从入门到精通


大家好,我是水滴~~

数据流与要是将 Java 的基础数据类型读取或写入流中,它有如下特点:

数据流是一个处理流,它必须套接在节点流之上。
数据流在读取和写入时的顺序要一致。否则,读取的数据会失真,造成乱码。

DataOutputStream(数据输出流)

数据输出流是一个处理流,它必须套接在一个节点流之上,比如:FileOutputStreamByteArrayOutputStream 等。

构造函数

DataOutputStream 只有一个构造函数。

DataOutputStream(OutputStream out)

创建一个数据输出流的实例,入参是一个字节流,可以是 FileOutputStreamByteArrayOutputStream 等节点流实例。

常用方法

DataOutputStream 继承了 FilterOutputStream ,而FilterOutputStream 又继承了 OutputStream,该数据输出流拥有常规的写入操作。

数据输出流提供了一些额外的写入方法,用于写入 Java 基础数据类型的数据:

方法名字节数描述
writeBoolean(boolean v)1写入一个 boolean 类型数据
writeByte(int v)1写入一个 byte 类型数据
writeShort(int v)2写入一个 short 类型数据
writeChar(int v)2写入一个 char 类型数据
writeInt(int v)4写入一个 int 类型数据
writeLong(long v)8写入一个 long 类型数据
writeFloat(float v)4写入一个 float 类型数据
writeDouble(double v)8写入一个 double 类型数据
writeUTF(String str)/写入一个 String 类型数据,编码格式为 UTF-8

代码示例

该代码使用 FileOutputStream 做为节点流,往文件中输入数据。

代码示例:

public static void write1() throws IOException {
    // 创建一个文件输出流实例
    FileOutputStream fos = new FileOutputStream("c:/io/12_1.txt");
    // 创建一个数据输出流,并使用文件输出流作为底层流
    DataOutputStream dos = new DataOutputStream(fos);

    // 写入一个 boolean 型
    dos.writeBoolean(true);
    // 写入一个 byte 型
    dos.writeByte(1);
    // 写入一个 char 型
    dos.writeChar('2');
    // 写入一个 short 型
    dos.writeShort(333);
    // 写入一个 int 型
    dos.writeInt(4444);
    // 写入一个 long 型
    dos.writeLong(55555);
    // 写入一个 float 型
    dos.writeFloat(666666.6f);
    // 写入一个 double 型
    dos.writeDouble(7777777.77);
    // 写入一个 String 型,编码格式为 UTF-8
    dos.writeUTF("水滴");

    // 关闭流并释放资源
    dos.close();
}

输出的文件不能被直接查看,内容为乱码,必须使用数据输入流读取,并且读取顺序要与写入顺序一致。

DataInputStream(数据输入流)

数据输入流同样是一个处理流,它也必须套接在一个节点流之上,比如:FileInputStream、ByteArrayInputStream 等。

构造函数

DataInputStream 只有一个构造函数。

DataInputStream(InputStream in)

创建一个数据输入流的实例,入参是一个字节流,可以是 FileInputStreamByteArrayInputStream 等节点流实例。

常用方法

DataInputStream 继承了 FilterInputStream ,而FilterInputStream 又继承了 InputStream,该数据输出流拥有常规的写入操作。

数据输入流提供了一些额外的读取方法,用于读取 Java 基础数据类型的数据:

方法名字节数描述
boolean readBoolean()1读取一个 boolean 类型数据
byte readByte()1读取一个 byte 类型数据
readShort()2读取一个 short 类型数据
readChar()2读取一个 char 类型数据
int readInt()4读取一个 int 类型数据
long readLong()8读取一个 long 类型数据
float readFloat()4读取一个 float 类型数据
double readDouble()8读取一个 double 类型数据
String readUTF()/读取一个 String 类型数据,编码格式为 UTF-8

代码示例

读取的数据顺序必要要与写入一致,下面代码与DataOutputStream 的代码示例顺序一致,可以正常读取。

代码示例:

public static void read1() throws IOException {
    // 创建一个文件输入流,做为节点流
    FileInputStream fis = new FileInputStream("c:/io/12_1.txt");

    // 创建一个数据输入流,做为转换流
    DataInputStream dis = new DataInputStream(fis);
    // 读取一个 boolean 型
    System.out.println(dis.readBoolean());
    // 读取一个 byte 型
    System.out.println(dis.readByte());
    // 读取一个 char 型
    System.out.println(dis.readChar());
    // 读取一个 short 型
    System.out.println(dis.readShort());
    // 读取一个 int 型
    System.out.println(dis.readInt());
    // 读取一个 long 型
    System.out.println(dis.readLong());
    // 读取一个 float 型
    System.out.println(dis.readFloat());
    // 读取一个 double 型
    System.out.println(dis.readDouble());
    // 读取一个 String 型,编码格式为 UTF-8
    System.out.println(dis.readUTF());

    // 关闭流并释放资源
    dis.close();
}

输出结果:

true
1
2
333
4444
55555
666666.6
7777777.77
水滴

系列文章

🔥 【Java I/O 流】文件的操作——java.io.File 类详解

🔥 【Java I/O 流】I/O 流的原理与流的分类

🔥 【Java I/O 流】字节输入输出流:InputStream & OutputStream

🔥 【Java I/O 流】文件字节输入输出流:FileInputStream & FileOutputStream(文件读写案例)

🔥 【Java I/O 流】字符输入输出流:Reader 和 Writer

🔥 【Java I/O 流】文件字符输入输出流:FileReader 和 FileWriter

🔥 【Java I/O 流】字节缓冲流:BufferedInputStream 和 BufferedOutputStream

🔥 【Java I/O 流】字符缓冲流:BuffreadReader 和 BufferedWriter

🔥 【Java I/O 流】字节数组流:ByteArrayInputStream 和 ByteArrayOutputStream

热门专栏

👍 《IDEA 教程:从入门到精通

👍 《Java 教程:从入门到精通

👍 《MySQL 教程:从入门到精通

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

水滴技术

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

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

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

打赏作者

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

抵扣说明:

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

余额充值