Tag: 压缩输入

缓冲后台InputStream实现

我编写了包含其他流的后台InputStream (和OutputStream )实现,并在后台线程上OutputStream读,主要允许解压缩/压缩在解压缩流处理的不同线程中发生。 这是一个相当标准的生产者/消费者模型。 这似乎是一种简单的方法,可以通过简单的流程读取,处理和写入数据来充分利用多核CPU,从而更有效地利用CPU和磁盘资源。 也许“高效”不是最好的词,但与直接从ZipInputStream读取并直接写入ZipOutputStream相比,它提供了更高的利用率,对我来说更感兴趣,减少了运行时间。 我很高兴发布代码,但我的问题是我是否正在重新发明现有(和运算量更大)库中现有的东西? 编辑 – 发布代码…… 我的BackgroundInputStream代码如下( BackgroundOutputStream非常相似),但我想改进它的各个方面。 看起来我的工作太过艰难,无法前后传递缓冲区。 如果调用代码抛弃了对BackgroundInputStream引用,则backgroundReaderThread将永远挂起。 信号eof需要改进。 应将exception传播到前台线程。 我想允许使用来自提供的Executor的线程。 close()方法应该通知后台线程,并且不应该关闭包装的流,因为包装的流应该由从中读取的后台线程拥有。 在关闭之后做一些愚蠢的事情应该适当地照顾。 package nz.co.datacute.io; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.concurrent.LinkedBlockingQueue; public class BackgroundInputStream extends InputStream { private static final int DEFAULT_QUEUE_SIZE = 1; private static final int DEFAULT_BUFFER_SIZE = 64*1024; private final int queueSize; private final […]