krl*_*mlr 3 java compression multithreading gzipoutputstream
是否有一个GZIPOutputStream的实现,可以在一个单独的线程中进行繁重的工作(压缩+写入磁盘)?
我们不断编写大量的GZIP压缩数据.我正在寻找可替代GZIPOutputStream的替代品.
您可以写入PipedOutputStream并拥有一个读取PipedInputStream的线程并将其复制到您喜欢的任何流中.
这是一个通用的实现.你给它一个要写入的OutputStream,它返回一个OutputStream供你写入.
public static OutputStream asyncOutputStream(final OutputStream out) throws IOException {
PipedOutputStream pos = new PipedOutputStream();
final PipedInputStream pis = new PipedInputStream(pos);
new Thread(new Runnable() {
@Override
public void run() {
try {
byte[] bytes = new byte[8192];
for(int len; (len = pis.read(bytes)) > 0;)
out.write(bytes, 0, len);
} catch(IOException ioe) {
ioe.printStackTrace();
} finally {
close(pis);
close(out);
}
}
}, "async-output-stream").start();
return pos;
}
static void close(Closeable closeable) {
if (closeable != null) try {
closeable.close();
} catch (IOException ignored) {
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1017 次 |
| 最近记录: |