1

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

4

3 回答 3

2

阅读有关 IO 的 Java 教程

你应该

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

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

于 2012-12-09T15:45:27.820 回答
1

我应该使用什么字符集

您需要将数据写入字节,而不是字符,所以忘记字符集。

我可以向文件写入不到 1 个字节吗

不,这是不可能的。但是要遵循解码器预期的位流,您可能需要从 5 位和 3 位之类的东西构造一个字节,然后再将该字节写入文件。

于 2012-12-09T15:48:57.190 回答
1

压缩几乎总是比文件 IO 更昂贵。除非您知道这是一个瓶颈,否则您不应该担心写入速度。

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

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

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

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

我可以向文件写入不到 1 个字节吗?

从技术上讲,您可以使用小于磁盘上的块大小,例如 512 字节或 4 KB。您可以写入比这更少的任何数量,但它不会使用更少的空间,如果这样做也没关系,因为磁盘数量太小而无需担心。

我应该使用 Scanners/BufferedWriters 等吗?

不,这些是用于文本的,

而是使用 DataOutputStream 和 DataInputStream 因为它们是二进制的。

于 2012-12-09T17:46:13.680 回答