如何解压缩文件并将其读取到java中的ByteBuffer?

时间:2012-04-01 03:57:00

标签: java android stream gzip bytebuffer

我有一段像这样的代码......

FileInputStream fi = new FileInputStream(filein);
GZIPInputStream gzis = new GZIPInputStream(fi);
ByteBuffer bbuffer = ByteBuffer.allocate(115200);

fi.available()为84300,但gzis.available()仅为1. file(filein)已被压缩。

我想阅读文件,解压缩,最后将其放入我的ByteBuffer bbufer

我怎么能意识到这个操作?

1 个答案:

答案 0 :(得分:0)

gzis.available() = 1;并不意味着存在问题,它只是意味着您只能从Stream中读取1个字节的信息,然后才能继续。你不能指望整个未压缩文件只能在一个命令中使用。

要读取整个文件,您需要有一个循环继续读取InputStream,直到您拥有所有数据。例如......

int bytesRead = 0;
int bytesAvailable = gzis.available();
while (bytesAvailable > 0){
    gzis.read(bbuffer,bytesRead,bytesAvailable);
    bytesRead += bytesAvailable;
    bytesAvailable = gzis.available();
}

当然,如果您不确定未压缩文件的最终大小,则需要添加额外的代码,以便在需要更多空间时调整bbuffer的大小。