Java IO: DataOutputStream 类

在 Java 中,借助 Java 的 DataOutputStream 类,你不仅能向 OutputStream 写入字节,还可以写入 Java 基本数据类型。只需将 OutputStream 封装在 DataOutputStream 里,就能向其中写入各种基本数据类型。这也正是它被命名为 DataOutputStream 的缘由,因为你能够向 OutputStream 写入诸如 int、long、float 和 double 等类型的值,而非仅仅局限于原始字节。

image.png

注意,通常会将 DataOutputStream 与 DataInputStream 结合使用。使用 DataOutputStream 将数据写入文件等,然后再使用 DataInputStream 读取数据。

DataOutputStream 示例

以下是一个 DataOutputStream 示例:

package com.hxstrive.java_io;

import java.io.*;

public class DataOutputStreamExample {
    public static void main(String[] args) throws IOException {
        // 写入数据到 DataOutputStream
        try (DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("D:\\data.bin"))) {
            // 将基础类型数据写出到文件
            dataOutputStream.writeInt(123);
            dataOutputStream.writeFloat(123.45F);
            dataOutputStream.writeLong(789);
        }
    }
}

上面示例,先创建了一个 DataOutputStream,并将转换后的数据写入 FileOutputStream。

使用 DataOutputStream 和 DataInputStream

如前所述,DataInputStream 类经常与 DataOutputStream 类一起使用。下面举例说明先用 DataOutputStream 写入数据,然后再用 DataInputStream 读取数据。示例:

package com.hxstrive.java_io;

import java.io.*;

public class DataInputStreamExample2 {

    public static void main(String[] args) throws IOException {
        // 临时存放数据
        ByteArrayOutputStream output = new ByteArrayOutputStream();

        // 写入数据到 DataOutputStream
        try (DataOutputStream dataOutputStream = new DataOutputStream(output)) {
            dataOutputStream.writeInt(123);
            dataOutputStream.writeFloat(123.45F);
            dataOutputStream.writeLong(789);
        }

        // 使用 DataInputStream 读取 DataOutputStream 写出的数据
        try(DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(output.toByteArray()))) {
            int int123 = dataInputStream.readInt();
            float float12345 = dataInputStream.readFloat();
            long long789 = dataInputStream.readLong();
            System.out.println("int123 = " + int123);
            System.out.println("float12345 = " + float12345);
            System.out.println("long789 = " + long789);
        }
    }
}

上述示例,首先创建 DataOutputStream 类,然后将 int、float 和 long 值写入 ByteArrayOutputStream,临时存放(当然,你也可以直接写入到某个文件)。其次,示例创建了一个 DataInputStream,从 ByteArrayOutputStream 返回的字节数组中读入 int、float 和 long 值。

关闭 DataOutputStream

当你完成向 DataOutputStream 写入数据的操作后,一定要记得将其关闭。

注意:关闭 DataOutputStream 时,它所写入的 OutputStream 实例也会随之关闭。

若要关闭 DataOutputStream,只需调用其 close() 方法即可。例如:

dataOutputStream.close();

您还可以使用 Java 7 中引入的 try-with-resources 结构。例如:

OutputStream output = new FileOutputStream("D:\\data.bin");
try(DataOutputStream dataOutputStream = new DataOutputStream(output)){
    dataOutputStream.writeInt(123);
    dataOutputStream.writeFloat(123.45F);
    dataOutputStream.writeLong(789);
}

需注意,此处不再有任何显式的 close() 方法调用,因为 try-with-resources 结构已自动处理了资源关闭问题。

另外,第一个 FileOutputStream 实例并非在 try-with-resources 代码块中创建,这就表明 try-with-resources 块不会自动关闭该 FileOutputStream 实例。不过,当关闭 DataOutputStream 时,它会同时关闭其写入数据的 OutputStream 实例,所以 FileOutputStream 实例会在 DataOutputStream 关闭时一并关闭。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号