大家好,我是欧阳方超,公众号同名。

DataInputStream和DataOutputStream是Java IO中用于读写基本数据类型的流类,它们一般搭配使用以确保写入的数据与读取的数据的一致性,它们把底层字节流进一步封装,从而实目前读写数据时可以按照Java中的基本数据类型进行读写,而不仅仅像FileInputStream和FileOutputStream那样以字节的形式进行读写。
DataInputStream允许从输入流中读取Java基本数据类型的数据,所读数据一般为DataOutputStream写入的二进制数据,一般与FileInputStream或ByteArrayInputStream一起使用。
DataOutputStream允许把Java基本数据类型的数据写入到底层输出流中,进而保存到二进制文件中,用于把数据打包成可跨平台读取的二进制文件。
它们都是字节流的包装流,可以与FileInputStream、ByteArrayOutputStream等输入输出流混合使用。
下面通过一个示例展示一下如何通过DataOutputStream写入Java基本类型数据,然后再通过DataInputStream读取出Java基本类型的数据。
package com.example.demo;
import java.io.*;
public class IOTest {
public static void main(String[] args) {
try {
//创建输出流
DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("/Users/mac/data.bin"));
dataOutputStream.writeInt(65);//写入整数
dataOutputStream.writeFloat(3.14f);//写入浮点数
dataOutputStream.writeChar('C');//写入字符
dataOutputStream.writeUTF("Java IO");//写入字符串
dataOutputStream.close();
//读取数据
DataInputStream dataInputStream = new DataInputStream(new FileInputStream("/Users/mac/data.bin"));
int intValue = dataInputStream.readInt();
float floatValue = dataInputStream.readFloat();
char charValue = dataInputStream.readChar();
String strValue = dataInputStream.readUTF();
System.out.println("读取的整数:" + intValue);
System.out.println("读取的浮点数:" + floatValue);
System.out.println("读取的字符:" + charValue);
System.out.println("读取的字符串:" + strValue);
dataInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
上面的程序往data.bin文件中先后写入了整数65、浮点数3.14、字符C、字符串Java IO,读取时可按照写入顺序将它们读出,程序输出如下:
读取的整数:65
读取的浮点数:3.14
读取的字符:C
读取的字符串:Java IO
DataInputStream的常用读取数据的方法有,readInt()、readLong()、readDouble()、readBoolean() 等。DataOutputStream常用的写入方法有,writeInt(int v)、writeLong(long v)、writeDouble(double v)、writeBoolean(boolean v) 等。
常见组合方式:DataOutputStream 与 FileOutputStream(写入文件)、DataInputStream 与 FileInputStream(从文件读取)、DataOutputStream 与 ByteArrayOutputStream(写入字节数组再进一步处理)。
也可以再包装一层缓冲以提升性能,例如
BufferedOutputStream/DataOutputStream 的组合;读取端也可用
BufferedInputStream/DataInputStream。
二进制文件存储:当需要把一组数据以紧凑且可直接读回的二进制格式写入磁盘(或网络传输)时,DataOutputStream 可以逐个写入整型、浮点型、布尔值等;DataInputStream 再从同样的格式读取回来。
跨语言/跨平台数据交换的简单格式:如果对读取端有严格的二进制数据结构要求,按 DataOutputStream 的顺序写入数据,读取端只要使用 DataInputStream 即可按一样顺序读取。
简化数据序列化:相比手动处理字节数组,DataOutputStream 提供了直接写入基本类型的方法,减少出错概率。
DataInputStream 和 DataOutputStream 的使用场景核心在于需要把数据以固定的二进制表明方式写入或读取,便于高效、简单地进行二进制文件存储或跨语言的数据交换。它们提供了对基本数据类型的直接读写方法,减少手动字节处理的工作量,同时要求写入与读取端保持一致的顺序与类型约定。
我是欧阳方超,把事情做好了自然就有兴趣了,如果你喜爱我的文章,欢迎点赞、转发、评论加关注。我们下次见。