Java IO:DataOutputStream
JavaDataOutputStream类使我们可以将Java基元写到OutputStream而不是只写字节。我们将OutputStream包装在DataOutputStream中,然后可以向其编写基元。这就是为什么将其称为DataOutputStream的原因,因为我们可以将" int"," long"," float"和" double"值写入" OutputStream",而不仅仅是原始字节。
通常,我们会同时使用Java DataOutputStream和Java DataInputStream。我们使用DataOutputStream将数据写入例如文件,然后使用" DataInputStream"再次读取数据。稍后我将提供一个示例。
一起使用DataOutputStream和DataInputStream是一种方便的方法,它可以将比字节更大的原语写入OutputStream并再次读取它们,确保使用正确的字节顺序等。
DataOutputStream示例
这是一个JavaDataOutputStream示例:
DataOutputStream dataOutputStream = new DataOutputStream(
new FileOutputStream("binary.data"));
dataOutputStream.write(45); //byte data
dataOutputStream.writeInt(4545); //int data
dataOutputStream.writeDouble(109.123); //double data
dataOutputStream.close();
本示例首先创建一个" DataOutputStream",它将转换后的数据写入" FileOutputStream"。其次,该示例将一个"字节",一个" int"和一个"双精度"写入" DataOutputStream",然后将这些原语转换为字节并将其写入" FileOutputStream"。最后,关闭" DataOutputStream"。
将DataOutputStream与DataInputStream一起使用
如前所述,通常将DataOutputStream类与DataInputStream一起使用。因此,我只想向我们展示一个示例,该示例首先使用DataOutputStream写入数据,然后使用DataInputStream再次读取。这是示例Java代码:
import java.io.*;
public class DataOutputStreamExample {
public static void main(String[] args) throws IOException {
DataOutputStream dataOutputStream =
new DataOutputStream(
new FileOutputStream("data/data.bin"));
dataOutputStream.writeInt(123);
dataOutputStream.writeFloat(123.45F);
dataOutputStream.writeLong(789);
dataOutputStream.close();
DataInputStream dataInputStream =
new DataInputStream(
new FileInputStream("data/data.bin"));
int int123 = dataInputStream.readInt();
float float12345 = dataInputStream.readFloat();
long long789 = dataInputStream.readLong();
dataInputStream.close();
System.out.println("int123 = " + int123);
System.out.println("float12345 = " + float12345);
System.out.println("long789 = " + long789);
}
}
这个例子首先创建一个" DataOutputStream",然后将一个" int"," float"和一个" long"值写入文件。第二个例子创建了一个" DataInputStream",它从同一文件中读取" int"," float"和" long"值。
关闭一个DataOutputStream
完成将数据写入" DataOutputStream"后,我们应该记得将其关闭。关闭DataOutputStream也将关闭DataOutputStream正在写入的OutputStream实例。
关闭DataOutputStream的方法是调用其close()方法。这是关闭DataOutputStream的样子:
dataOutputStream.close();
我们还可以使用Java 7中引入的try-with-resources构造。这是如何使用try-with-resources构造使用和关闭" DataOutputStream"外观的方法:
OutputStream output = new FileOutputStream("data/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实例,因此,当DataOutputStream关闭时,FileOutputStream实例也将关闭。

