我有一个任务,我们需要在java中编写一个(非常简化的)多线程压缩程序(使用内置的GzipOutputStream很好)。我主要理解如何做其他所有事情,但是指令的一部分指定我们必须将输入流分成128kB块,并且每个线程将工作压缩其中一个块。
我认为我遗漏了一些明显的东西,但目前我能想到的唯一方法是分割输入流是使用IO InpuStream的read()命令(一次读取一个字节)并手动计数最多128或如果我们先到达文件的末尾。但这似乎非常低效。
另一件事,有些偏离切线,我仍然忙着谷歌搜索试图找出,是因为它说我们应该使用每个前一个块的最后32kB来为下一个块填充压缩字典。我隐约明白这意味着什么,虽然我不完全确定如何实现它,或者它是否影响我应该如何逐字节处理输入流。
编辑:要指定,除非我考虑使用不同的字典,否则deflater类可以接受一个设置压缩级别(1到9)的int但是...我不知道如何将其转换为对应32kB,除非我必须完全写一个新词典。我们只做压缩,因此不需要inflater类等。
答案 0 :(得分:0)
我认为我遗漏了一些明显的东西,但目前我能想到的唯一方法是分割输入流是使用IO InpuStream的read()命令(一次读取一个字节)并手动计数最多128或如果我们先到达文件的末尾。但这似乎非常低效。
是的。那将是一个可怕的解决方案。
您需要使用BufferedInputStream
或InputStream.read(byte[], int, int)
。如果输入是文件,File.length()
方法也可能有用。
由于这是家庭作业,我会让你详细说明。