🌺个人主页:杨永杰825_Spring,Mysql,多线程-CSDN博客
⭐每日一句:成为架构师路途遥远
📢欢迎大家:关注🔍+点赞👍+评论📝+收藏⭐️
目录
前言
- Java的DataInputStream是一个输入流,它允许应用程序从底层输入流中以字节为单位读取基本数据类型的数据。它提供了一系列的read方法,可以读取不同类型的数据,例如字节、字符、整数、浮点数等。
- DataInputStream是一个装饰器模式的典型应用,它包装了底层的输入流,并提供了更方便的方法来读取数据。它还提供了用于读取UTF-8编码的字符串的方法。
- 使用DataInputStream时,要注意读取数据的顺序必须与写入数据的顺序相匹配。否则,读取数据可能会出现错误。
方法
Modifier and Type | Method and Description |
---|---|
int | read(byte[] b) 读取一定数量的字节从包含输入流并存入缓冲区阵列 |
int | read(byte[] b, int off, int len) 读到 |
boolean | readBoolean() 看到的 |
byte | readByte() 看到的 |
char | readChar() 看到的 |
double | readDouble() 看到的 |
float | readFloat() 看到的 |
void | readFully(byte[] b) 看到的 |
void | readFully(byte[] b, int off, int len) 看到的 |
int | readInt() 看到的 |
String | readLine() 过时的。 此方法没有正确地将字节转换为字符。作为 JDK 1.1,阅读文本行的首选方式是通过BufferedReader.readLine() 方法。程序使用的DataInputStream 类的台词可以转换的形式替换代码中使用BufferedReader 类:
:DataInputStream d = new DataInputStream(in); BufferedReader d = new BufferedReader(new InputStreamReader(in)); |
long | readLong() 看到的 |
short | readShort() 看到的 |
int | readUnsignedByte() 看到的 |
int | readUnsignedShort() 看到的 |
String | readUTF() 看到的 |
static String | readUTF(DataInput in) 从流 |
int | skipBytes(int n) 看到的 |
以下是一些常用的DataInputStream方法:
- readBoolean():读取一个布尔值。
- readByte():读取一个字节。
- readChar():读取一个字符。
- readDouble():读取一个双精度浮点数。
- readFloat():读取一个单精度浮点数。
- readInt():读取一个整数。
- readLong():读取一个长整数。
- readShort():读取一个短整数。
- readUTF():读取一个UTF-8编码的字符串。
例如,以下代码演示了如何使用DataInputStream从文件中读取数据:
try (DataInputStream dis = new DataInputStream(new FileInputStream("data.txt"))) {
int value = dis.readInt();
double pi = dis.readDouble();
String message = dis.readUTF();
System.out.println("Value: " + value);
System.out.println("PI: " + pi);
System.out.println("Message: " + message);
} catch (IOException e) {
e.printStackTrace();
}
在上面的示例中,DataInputStream从名为"data.txt"的文件中读取一个整数、一个双精度浮点数和一个字符串,并将它们打印到控制台上。
使用场景
Java的DataInputStream类主要用于读取二进制数据。它提供了一组方法来从输入流中读取不同类型的数据,如整数、浮点数、布尔值和字符串等。它常用于以下场景:
读取二进制文件:DataInputStream可以打开二进制文件并从中读取数据。它可以读取任意类型的数据,并按照预定的格式解析。
解析网络协议:许多网络协议使用二进制格式传输数据。DataInputStream可以从网络连接中读取数据,并根据协议定义解析数据。
读取序列化对象:Java的序列化机制可以将对象转换为二进制表示形式,然后保存到文件或在网络上传输。DataInputStream可以读取序列化对象的二进制表示,并将其还原为原始的Java对象。
解析字节流:有时候需要从字节流中解析各种类型的数据。DataInputStream提供了方便的方法来读取字节流中的不同类型的数据。
需要注意的是,DataInputStream是字节流(InputStream)的子类,因此它适用于读取二进制数据。若要读取文本数据(如字符数据),建议使用Reader类。
案例
以下是一个使用DataInputStream读取二进制文件的示例:
import java.io.*;
public class DataInputStreamExample {
public static void main(String[] args) {
try (DataInputStream dis = new DataInputStream(new FileInputStream("data.bin"))) {
// 读取整数
int value = dis.readInt();
System.out.println("Value: " + value);
// 读取浮点数
double pi = dis.readDouble();
System.out.println("PI: " + pi);
// 读取字符串
String message = dis.readUTF();
System.out.println("Message: " + message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 上面的代码首先创建了一个DataInputStream,它使用FileInputStream来读取名为"data.bin"的二进制文件。然后使用readInt方法读取一个整数、readDouble方法读取一个浮点数,最后使用readUTF方法读取一个字符串。
- 假设"data.bin"的二进制内容是一个整数123,一个浮点数3.14和一个字符串"Hello, World!",运行上面的代码将输出:
Value: 123
PI: 3.14
Message: Hello, World!
这表明成功读取了二进制文件中的数据并将其打印出来。