我有一段这样的代码…
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
的大小。