如何解压缩文件并将其读取到java中的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中。

我怎么能实现这个操作?

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新