什么Java类允许以二进制和ASCII格式写入文件?

时间:2015-01-28 20:11:53

标签: java file-writing

我需要编写文件,包括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写入,要么只用于二进制写入。

你对这个问题还有其他建议吗?

1 个答案:

答案 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.