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实例也将关闭。