0

我有一个任务,我们需要在 java 中编写一个(非常简化的)多线程压缩程序(使用内置的 GzipOutputStream 很好)。我主要了解如何做其他所有事情,但是指令的一部分指定我们必须将输入流划分为 128kB 块,并且每个线程都将压缩其中一个块。

我想我遗漏了一些明显的东西,但目前我能想到的分割输入流的唯一方法是使用 IO InpuStream 的 read() 命令(一次读取一个字节)并手动计数128 或者如果我们先到达文件末尾。但这似乎非常低效。

另一件事有点离题,我仍在忙着用谷歌搜索试图弄清楚,它说我们应该使用每个前一个块的最后 32kB 来为下一个块准备压缩字典。我模糊地理解这意味着什么,尽管我不完全确定如何实现它,或者它是否会影响我应该如何逐字节处理输入流。

编辑:要指定,除非我正在考虑使用不同的字典,否则 deflater 类可以接受一个设置压缩级别(1 到 9)的 int 但是......我不知道如何让它对应于 32kB ,除非我必须完全写一本新字典。我们只是在做压缩,所以不需要充气类或类似的东西。

4

1 回答 1

0

我想我遗漏了一些明显的东西,但目前我能想到的拆分输入流的唯一方法是使用 IO InpuStream 的 read() 命令(一次读取一个字节)并手动计数128 或者如果我们先到达文件末尾。但这似乎非常低效。

是的。那将是一个糟糕的解决方案。

您需要使用BufferedInputStreamInputStream.read(byte[], int, int)。该File.length()方法也可以证明是有用的......如果输入是一个文件。

由于这是家庭作业,我将让您解决细节问题。

于 2012-10-27T01:52:52.967 回答