java - 如何将 ArchiveEntry 转换为 InputStream?

标签 java apache-commons-compress

我正在阅读一个 tar.gz 存档,使用

ArchiveEntry entry = tarArchiveInputStream.getNextEntry();

问题:如何转换这个 ArchiveEntryInputStream 这样我就可以实际读取文件并将其处理为 String?

最佳答案

您可以使用 IOUtils 来完整读取 InputStream:

import org.apache.commons.compress.utils.IOUtils

byte[] buf = new byte[(int) entry.getSize()];
int readed  = IOUtils.readFully(tarArchiveInputStream,buf);

//readed should equal buffer size
if(readed != buf.length) {
 throw new RuntimeException("Read bytes count and entry size differ");
}

String string = new String(buf, StandardCharsets.UTF_8);

如果您的文件是 utf-8 以外的其他编码,请在字符串的构造函数中使用它而不是 utf-8。

关于java - 如何将 ArchiveEntry 转换为 InputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34653674/

相关文章:

java - 如何在 Java 中使用 Commons compress 解压后删除 ZIP 存档?

java - Apache Commons 压缩无法在 tar 中添加硬链接(hard link)

Java-重写泛型接口(interface)方法时如何获取具体参数类型

java - 希望重新订购 map

java - 如何从子类获取父类(super class)数据成员

android dalvik vm-heap 在 XZ 压缩时内存分配不足

java - jar libs\commons-compress-1.18.jar 有一个主类 org.apache.commons.compress.archivers.Lister 与声明的 main 不匹配

java - 在 Leiningen (Clojure) for Android 中设置 JavaVersion sourceCompatibility(Java 1.7 vs 1.8)

java - 如何使图像大小适合 JFrame 大小?

java - 使用 Apache Commons 压缩库以不依赖于机器的方式将文件和轨道添加到 Tar 存档中