Java 从压缩文本文件中获取文本行的读取器

Java 从压缩文本文件中获取文本行的读取器,java,android,zip,inputstream,bufferedreader,Java,Android,Zip,Inputstream,Bufferedreader,摘要:拥有包含a.txt的a.zip字节图像,如何获得一个干净、正确的读取器,返回文本文件的行 我确实将zip文件的图像从web服务下载到byte[]内容中。我想写一个这样的方法 private BufferedReader contentToBufferedReader(byte[] content) 这将返回一个可以像 reader = contentToBufferedReader(content); while ((line = reader.readLine()) != null)

摘要:拥有包含
a.txt
a.zip
字节图像,如何获得一个干净、正确的读取器,返回文本文件的行

我确实将zip文件的图像从web服务下载到
byte[]内容中
。我想写一个这样的方法

private BufferedReader contentToBufferedReader(byte[] content)
这将返回一个可以像

reader = contentToBufferedReader(content);
while ((line = reader.readLine()) != null) {
    processThe(line);
}
reader.close()
到目前为止,我已经(更新了


我不知道在出现故障时如何关闭所有流对象。此外,如果
读取器已成功返回、使用和关闭,我不确定如何关闭它们。

检查此主题,您可能需要先解压缩文件,然后才能读取它


这将一次性取出字节(为方便起见,使用番石榴ByTestStreams)

你可以得到这样的读者:

InputStreamReader reader = new InputStreamReader(new ByteArrayInputStream(data)));

调用zipStream.getNextEntry()时,zipStream将前进。我还认为流不支持标记和重置iirc,这意味着您只能读取一次(因此,在将其传递给其他可能需要随机访问的处理之前,请立即将其全部读取)

可能重复感谢Katja关于如何装饰
zipStream
的提示。我已经修改了这个问题,所以它不应该被认为是你提到的问题的重复。我发现
zip4j
可能是Android标准zip支持的一个很好的替代品。我得到的zip映像似乎使用了zip64,而ZipInputStream不支持zip64
+1感谢您教我
条目.isDirectory()
。否则,如果可以避免的话,我不希望将
zipStream
的内容提取到
byte[]
。另外,我更愿意只在一个地方调用
zipStream.getnextry()
,即处于
while
条件下。很高兴提供帮助。请注意,即使没有一次取出所有字节,也要确保只读取一次。我做了噩梦才发现这一点。
ZipEntry entry = zipStream.getNextEntry();
while (entry != null) {
  if (!entry.isDirectory()) {
    String filename = entry.getName();//this includes the path!
    byte[] data = ByteStreams.toByteArray(zipStream);
    //do something with the bytes 
  }
  entry = zipIn.getNextEntry();
}
InputStreamReader reader = new InputStreamReader(new ByteArrayInputStream(data)));