DataOutputStream和DataInputStream
文章目录
一、DataOutPutStream
1.1 定义
DataOutputStream
是 Java 中的一个类,用于将基本数据类型和字符串数据写入输出流。它是 OutputStream
的子类,因此可以用于将数据写入各种输出目标,如文件、网络连接等。
1.2 DataOutputStream
的主要特点和用法:
- 写入基本数据类型:
DataOutputStream
提供了方法来将各种基本数据类型写入输出流,包括int
、long
、double
、float
、boolean
等。这使得可以直接将这些数据类型写入输出流,而无需手动进行字节转换。 - 写入字符串:除了基本数据类型外,
DataOutputStream
也可以写入字符串数据。它提供了writeUTF()
方法来将字符串以 UTF-8 编码写入输出流。这使得可以方便地将字符串数据写入输出流,并在读取时使用DataInputStream
的readUTF()
方法来解析。 - 字节顺序:
DataOutputStream
会根据当前平台的字节顺序将数据写入输出流。在大多数情况下,Java 使用的是网络字节顺序(big-endian),但也有一些平台使用小端字节顺序。可以放心使用DataOutputStream
来确保写入数据时使用正确的字节顺序。 - 异常处理:在使用
DataOutputStream
写入数据时,需要注意处理可能抛出的IOException
异常。例如,在写入文件时,如果文件系统出现问题或者磁盘已满,就可能会抛出IOException
异常。
1.3示例
以下是一个简单的示例,演示了如何使用 DataOutputStream 将数据写入文件:
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class DataOutputStreamExample {
public static void main(String[] args) {
try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.txt"))) {
// 写入整数
int intValue = 42;
dos.writeInt(intValue);
// 写入双精度浮点数
double doubleValue = 3.14;
dos.writeDouble(doubleValue);
// 写入字符串
String stringValue = "Hello, world!";
dos.writeUTF(stringValue);
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个示例中,首先创建了一个 DataOutputStream
对象,它连接到一个名为 data.txt
的文件输出流。然后,使用 writeXXX()
方法将整数、双精度浮点数和字符串写入文件。最后,在结束时关闭输出流。
二、DataInputStream
1.1定义
DataInputStream
是 Java 中的一个类,用于从输入流中读取基本数据类型和字符串数据。它是 InputStream
的子类,因此可以用于从各种输入源(如文件、网络连接等)读取数据。
1.2 DataInputStream
的主要特点和用法:
- 读取基本数据类型:
DataInputStream
提供了方法来读取各种基本数据类型,包括int
、long
、double
、float
、boolean
等。这使得从输入流中读取数据时无需手动解析字节流,而是可以直接读取相应的数据类型。 - 读取字符串:除了基本数据类型外,
DataInputStream
也可以读取字符串数据。它提供了readUTF()
方法来读取以 UTF-8 编码的字符串。UTF-8 编码是一种变长的编码方式,可以表示几乎所有的 Unicode 字符。 - 字节顺序:
DataInputStream
会根据当前平台的字节顺序来读取数据。在大多数情况下,Java 使用的是网络字节顺序(big-endian),但也有一些平台使用小端字节顺序。可以使用DataInputStream
的readXXX()
方法来确保读取数据时使用正确的字节顺序。 - 异常处理:在使用
DataInputStream
读取数据时,需要注意处理可能抛出的EOFException
异常。该异常表示已经到达了输入流的末尾,无法继续读取更多的数据。
1.3示例
以下是一个简单的示例,演示了如何使用 DataInputStream
从文件中读取数据:
```java
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class DataInputStreamExample {
public static void main(String[] args) {
try (DataInputStream dis = new DataInputStream(new FileInputStream("data.txt"))) {
// 读取整数
int intValue = dis.readInt();
System.out.println("Integer value: " + intValue);
// 读取双精度浮点数
double doubleValue = dis.readDouble();
System.out.println("Double value: " + doubleValue);
// 读取字符串
String stringValue = dis.readUTF();
System.out.println("String value: " + stringValue);
} catch (IOException e) {
e.printStackTrace();
}
}
}
```