我有一种方法
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);
}
我想把
inputStream
转换成
zipInputStream
,怎么做呢?
将Java流转换给我是非常令人困惑的,而且我没有纠正它们
发布于 2012-09-07 16:42:46
GZIPInputStream
将用于
解压缩
(传入的
InputStream
)。要使用GZIP压缩传入的
InputStream
,基本上需要将其写入
GZIPOutputStream
。
如果使用
InputStream
将gzipped内容写入
byte[]
,使用
ByteArrayInputStream
将
byte[]
转换为
InputStream
,则可以从中获得一个新的
byte[]
。
所以,基本上:
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());