首页 > 编程笔记 > Java笔记 阅读:6

Java DataInputStream和DataOutputStream用法详解(附带实例)

数据输入/输出流(DataInputStream 类与 DataOutputStream 类)允许应用程序以与机器无关的方式从底层输入流中读取基本 Java 数据类型。也就是说,当读取一个数据时,不必再关心这个数值应当是哪种字节。

DataInputStream 类与 DataOutputStream 类的构造方法如下:
DataOutputStream 类提供了将字符串、double 数据、int 数据、boolean 数据写入文件中的方法。其中,将字符串写入文件中的方法有 3 种,分别是 writeBytes(String s)、writeChars(String s)、writeUTF(String s)。由于 Java 中的字符是 Unicode 编码的,并且是双字节的:
DataInputStream 类只提供了一个 readUTF() 方法返回字符串。这是因为要在一个连续的字节流中读取一个字符串,如果没有特殊的标记作为一个字符串的结尾,并且不知道这个字符串的长度,就无法知道读取到什么位置才是这个字符串的结束。

DataOutputStream 类中只有 writeUTF() 方法向目标设备中写入字符串的长度,因此也能准确地读回所写入的字符串。

【实例】使用数据流读写文本文件。分别通过 DataOutputStream 类的 writeUTF()、writeDouble()、writeInt() 和 writeBoolean() 方法向指定的 word.txt 文件中写入不同类型的数据,并通过 DataInputStream 类的相应方法将写入的数据输出到控制台上。
import java.io.*;

public class DataStreamDemo {
    public static void main(String[] args) {
        File file = new File("D:\\word.txt");
        try {
            // 创建 FileOutputStream 对象,指定要向其中写入数据的文件
            FileOutputStream fos = new FileOutputStream(file);
            // 创建 DataOutputStream 对象,用来向文件中写入数据
            DataOutputStream dos = new DataOutputStream(fos);
            dos.writeUTF("使用 writeUTF()方法写入数据"); // 将字符串写入文件中
            dos.writeDouble(19.8); // 将 double 数据写入文件中
            dos.writeInt(298); // 将 int 数据写入文件中
            dos.writeBoolean(true); // 将 boolean 数据写入文件中
            dos.close();
            fos.close();

            // 创建 FileInputStream 对象,指定要从中读取数据的文件
            FileInputStream fis = new FileInputStream(file);
            // 创建 DataInputStream 对象,用来从文件中读取数据
            DataInputStream dis = new DataInputStream(fis);
            System.out.println("readUTF 方法读取数据:" + dis.readUTF()); // 读取字符串
            System.out.println("readDouble 方法读取数据:" + dis.readDouble()); // 读取 double 数据
            System.out.println("readInt 方法读取数据:" + dis.readInt()); // 读取 int 数据
            System.out.println("readBoolean 方法读取数据:" + dis.readBoolean()); // 读取 boolean 数据
            dis.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
运行结果如下:

readUTF方法读取数据:使用writeUTF()方法写入数据
readDouble方法读取数据:19.8
readInt方法读取数据:298
readBoolean方法读取数据:true


使用记事本程序打开 word.txt 文件,如下图所示:


图 1 word.txt文件中的内容

尽管在记事本程序中看不出写入的字符串是“使用writeUFT()方法写入数据”,但程序通过 readUTF() 方法读回后显示在屏幕上的仍是“使用writeUFT()方法写入数据”。但如果使用 writeChars() 和 writeBytes() 方法写入字符串后,再读取回来就不容易了,读者不妨编写程序进行尝试。

相关文章