将输入流划分为块

时间:2012-10-27 01:24:27

标签: java multithreading compression

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

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

另一件事,有些偏离切线,我仍然忙着谷歌搜索试图找出,是因为它说我们应该使用每个前一个块的最后32kB来为下一个块填充压缩字典。我隐约明白这意味着什么,虽然我不完全确定如何实现它,或者它是否影响我应该如何逐字节处理输入流。

编辑:要指定,除非我考虑使用不同的字典,否则deflater类可以接受一个设置压缩级别(1到9)的int但是...我不知道如何将其转换为对应32kB,除非我必须完全写一个新词典。我们只做压缩,因此不需要inflater类等。

1 个答案:

答案 0 :(得分:0)

  

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

是的。那将是一个可怕的解决方案。

您需要使用BufferedInputStreamInputStream.read(byte[], int, int)。如果输入是文件,File.length()方法也可能有用。

由于这是家庭作业,我会让你详细说明。