需要提高从DB解压缩文件的性能

时间:2014-11-07 07:44:11

标签: java string performance inputstream bufferedinputstream

我从db获取压缩blob并以下面的方式使用该blob,

例如: -

byte[] inputBlob = blobfile.getBytes(1, (int) blobfile.length());

获得blob之后,我获得了zippedStream并将其传递给另一个Class方法(unzipper)。

例如: -

ByteArrayOutputStream zippedStream = null;
InputStream byteInputStream = null;
IParser parser = null;
byte[] buffer = null;
try {
        zippedStream = new ByteArrayOutputStream();
        byteInputStream = new ByteArrayInputStream(blob);
        blob = null;
        int bytes_read;
        buffer = new byte[byteInputStream.available()];

        while ((bytes_read = byteInputStream.read(buffer)) > 0) {
            zippedStream.write(buffer, 0, bytes_read);
        }
        buffer = null;
        byteInputStream.close();
        byteInputStream = null;

    }catch(Exception e){
        e.printStackTrace();
    }

unzipper方法: 例如: -

byte[] buffer = new byte[1024];
try {
    InputStream decodedInput = new ByteArrayInputStream(zippedStream.toByteArray());
    zippedStream.close();
    zippedStream = null;
    GZIPInputStream unzippedStream = new GZIPInputStream(decodedInput);
    decodedInput.close();
    decodedInput = null;
    int bytes_read;
    unzippedOutputstream = new ByteArrayOutputStream();
    while ((bytes_read = unzippedStream.read(buffer)) > 0) {
        unzippedOutputstream.write(buffer, 0, bytes_read);
    }
    buffer = null;
    unzippedStream.close();
    unzippedStream = null;
} catch (Exception ex) {
    logger.setException(ex);
    logger.error("unzipper", generateMsg("Exception occurred"));
}

使用这种方式我的应用程序被卡住了一段时间,性能非常糟糕。 是否有任何优化方法来获取zippedstream文件并轻松解压缩?

1 个答案:

答案 0 :(得分:0)

是否真的需要这一切缓冲。你可以解析一个流吗?

 InputStream zippedStream = ...
 IParser parser = ...
 parser.parse(new GZIPInputStream(zippedStream));

这将读取压缩数据,解压缩,效率更高。