我有一段像这样的代码......
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
。
我怎么能意识到这个操作?
答案 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
的大小。