day*_*mer 5 java inputstream gzipinputstream
我有一个方法
public void put(@Nonnull final InputStream inputStream, @Nonnull final String uniqueId) throws PersistenceException {
// a.) create gzip of inputStream
final GZIPInputStream zipInputStream;
try {
zipInputStream = new GZIPInputStream(inputStream);
} catch (IOException e) {
e.printStackTrace();
throw new PersistenceException("Persistence Service could not received input stream to persist for " + uniqueId);
}
Run Code Online (Sandbox Code Playgroud)
我想转换inputStream成zipInputStream,这样做的方法是什么?
将Java Streams转换为我真的很混乱,我没有让它们正确
Bal*_*usC 11
的GZIPInputStream是将用于解压缩的传入InputStream.要InputStream使用GZIP 压缩传入,您基本上需要将其写入a GZIPOutputStream.
你可以得到一个新的InputStream出来的,如果你用ByteArrayOutputStream写gzip压缩内容到byte[]并ByteArrayInputStream把一个byte[]成一个InputStream.
所以,基本上:
public void put(@Nonnull final InputStream inputStream, @Nonnull final String uniqueId) throws PersistenceException {
final InputStream zipInputStream;
try {
ByteArrayOutputStream bytesOutput = new ByteArrayOutputStream();
GZIPOutputStream gzipOutput = new GZIPOutputStream(bytesOutput);
try {
byte[] buffer = new byte[10240];
for (int length = 0; (length = inputStream.read(buffer)) != -1;) {
gzipOutput.write(buffer, 0, length);
}
} finally {
try { inputStream.close(); } catch (IOException ignore) {}
try { gzipOutput.close(); } catch (IOException ignore) {}
}
zipInputStream = new ByteArrayInputStream(bytesOutput.toByteArray());
} catch (IOException e) {
e.printStackTrace();
throw new PersistenceException("Persistence Service could not received input stream to persist for " + uniqueId);
}
// ...
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以将ByteArrayOutputStream/ 替换ByteArrayInputStream为由创建的临时文件上的FileOuputStream/ ,特别是如果这些流可以包含大数据,这些数据可能会在并发使用时溢出计算机的可用内存.FileInputStreamFile#createTempFile()
| 归档时间: |
|
| 查看次数: |
6647 次 |
| 最近记录: |