Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将ArchiveEntry转换为InputStream?_Java_Apache Commons Compress - Fatal编程技术网

Java 如何将ArchiveEntry转换为InputStream?

Java 如何将ArchiveEntry转换为InputStream?,java,apache-commons-compress,Java,Apache Commons Compress,我正在使用 ArchiveEntry entry=tarArchiveInputStream.getNextEntry() 问题:如何将其转换为InputStream,以便实际读取文件并将其处理为字符串?它已经是InputStream byte[] buf = new byte[(int) entry.getSize()]; int k = tarArchiveInputStream.read(buf, 0, buf.length); String s = new String(buf, 0,

我正在使用

ArchiveEntry entry=tarArchiveInputStream.getNextEntry()


问题:如何将其转换为
InputStream
,以便实际读取文件并将其处理为
字符串?

它已经是
InputStream

byte[] buf = new byte[(int) entry.getSize()];
int k = tarArchiveInputStream.read(buf, 0, buf.length);
String s = new String(buf, 0, k);

您可以使用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而不是utf-8。

如果您确实希望逐个读取文件,则TarEntry实际上会在其中保存文件对象:

此类表示Tar归档中的一个条目。它由条目的标题和条目的文件组成

因此,只需初始化另一个FileInputStream即可:

import org.apache.commons.io.IOUtils;
String file = IOUtils.toString(new FileInputStream(entry.getFile());

为了澄清,您是指apache的commons compress中的
org.apache.commons.compress.archivers.ArchiveEntry
?是的,我是指commons.compress。这可能是正确的解决方案,因为
IOUtils.readFully
可以直接从
commons.compress
使用。