我需要编写文件,包括ASCII中的标题和二进制中的值。
现在,我正在使用它:
File file = new File("~/myfile");
FileOutputStream out = new FileOutputStream(file);
// Write in ASCII
out.write(("This is a header\n").getBytes());
// Write a byte[] is quite easy
byte[] buffer = new buffer[4];
out.write(buffer, 0, 4);
// Write an int in binary gets complicated
out.write(ByteBuffer.allocate(4).putInt(6).array());
//Write a float in binary gets even more complicated
out.write(ByteBuffer.allocate(4).order(ByteOrder.BIG_ENDIAN)
.putFloat(4.5).array());
问题在于,以这种方式写入的速度非常慢(在性能方面),实际上比在ASCII中写入值要慢。但它应该更短,因为我写的数据更少。
我看过其他Java类,在我看来,它们要么只用于ASCII写入,要么只用于二进制写入。
你对这个问题还有其他建议吗?
答案 0 :(得分:0)
您可以使用FileOutputStream来编写二进制文件。要包含文本,您必须在写入流之前将其转换为byte []。
问题在于,用这种方式编写它的时间非常长,实际上比用ASCII编写值要长。但它应该更短,因为我写的数据更少。
混合文本和数据非常复杂且容易出错。数据的大小确实很重要,而数据的复杂性很重要。如果你想保持简单,我建议你考虑使用DataOutputStream。
要执行您的示例,您可以
DataOutputStream out = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("~/myfile")));
// Write in ASCII
out.write("This is a header\n".getBytes());
// Write a 32-bit int
out.writeInt(6);
//Write a float in binary
out.writeFloat(4.5f);
out.flush(); // the buffer.