Java DataInputStream:数据流中的魔术师
Java中的DataInputStream
是一个非常有用的类,它位于java.io
包中,主要用于从底层输入流中读取基本数据类型的数据。通过使用DataInputStream
,我们可以以与平台无关的方式读取各种数据类型,如整型、浮点型、字符串等。这对于处理二进制文件或网络通信中的数据传输特别有用。
基本概念
DataInputStream
是FilterInputStream
的一个子类,这意味着它可以包装任何类型的InputStream
对象,并提供额外的功能来读取不同类型的原始数据。它不支持写入操作,只支持读取。
主要方法
readBoolean()
: 读取一个布尔值。readByte()
: 读取一个字节。readChar()
: 读取一个字符。readDouble()
: 读取一个双精度浮点数。readFloat()
: 读取一个单精度浮点数。readFully(byte[] b)
: 读取一定数量的字节到数组中。readFully(byte[] b, int off, int len)
: 读取指定长度的字节到数组的指定偏移量开始的位置。readInt()
: 读取一个整数。readLine()
: 已过时,建议使用其他方法替代。readLong()
: 读取一个长整型。readShort()
: 读取一个短整型。readUTF()
: 读取一个修改后的UTF-8编码的字符串。skipBytes(int n)
: 跳过指定数量的字节。
使用场景
DataInputStream
常用于需要精确控制数据读取格式的应用程序中,比如在处理图像文件、音频文件或者在网络通信中传输复杂数据结构时。
示例代码
下面是一个简单的例子,演示如何使用DataInputStream
从文件中读取不同类型的数据:
import java.io.*;
public class DataInputStreamExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("example.dat");
DataInputStream dis = new DataInputStream(fis)) {
// 读取并打印数据
System.out.println("读取的布尔值: " + dis.readBoolean());
System.out.println("读取的字符: " + dis.readChar());
System.out.println("读取的整数: " + dis.readInt());
System.out.println("读取的长整型: " + dis.readLong());
System.out.println("读取的浮点数: " + dis.readFloat());
System.out.println("读取的双精度浮点数: " + dis.readDouble());
System.out.println("读取的字符串: " + dis.readUTF());
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个例子中,我们首先创建了一个FileInputStream
对象来读取名为example.dat
的文件。然后,我们使用这个FileInputStream
对象创建了一个DataInputStream
对象。接着,我们使用DataInputStream
的各种方法来读取文件中的不同类型的数据,并将它们打印出来。