写入文件最有效的方法?

时间:2012-12-09 15:39:49

标签: java file compression

我正在用Java编写自己的图像压缩程序,我有熵编码数据存储在多个数组中,我需要写入文件。我知道写入文件的不同方法,但我想知道在尝试使用尽可能少的存储空间时需要考虑什么。例如,我应该使用什么字符集(我只需要写正数和负数),如果我使用Scanners / BufferedWriters等,我能不能写一个小于1个字节的文件。事先谢谢,我可以如果需要,提供更多信息。

3 个答案:

答案 0 :(得分:2)

阅读Java tutorial about IO

你应该

  • 不使用Writers和字符集,因为你想写二进制数据
  • 使用缓冲流来避免过多的本机调用并使写入更快
  • 不使用扫描仪,因为它们用于读取数据而不是写入数据

不,你将无法在文件中写入少于一个字节。该字节是可以存储在文件中的最小信息量。

答案 1 :(得分:1)

  

我应该使用什么字符集

您需要将数据写为字节而不是字符,因此请忘记字符集。

  

我能不能将少于1个字节写入文件

不,这是不可能的。但是为了遵循解码器预期的比特流,您可能需要在将该字节写入文件之前从5位和3位构造一个字节。

答案 2 :(得分:1)

压缩几乎总是比文件IO贵。你不应该担心写作的速度,除非你知道这是一个瓶颈。

  

我正在用Java编写自己的图像压缩程序,我有熵编码数据存储在多个数组中,我需要写入文件。我知道写入文件的不同方法,但我想知道在尝试使用尽可能少的存储空间时需要考虑什么。

以二进制格式写入数据,它将是最小的。这就是几乎所有图像格式都使用二进制文件的原因。

  

例如,我应该使用什么字符集(我只需要写正数和负数),

字符编码用于编码字符,即文本。您通常不会以二进制格式使用这些格式(除非它们包含一些您最初不太可能做的文本)。

  

我可以写一个不到1个字节的文件,

从技术上讲,你可以使用少于磁盘上的块大小,例如512字节或4 KB。你可以写任何少于这个的数量,但它不会占用更少的空间,也不会真的重要,因为磁盘的数量太小而无法担心。

  

我应该使用Scanners / BufferedWriters等。

不,这些是用于文本的,

而是使用DataOutputStream和DataInputStream作为二进制文件。