找出我的最佳方法是什么java.io.InputStream
包含压缩数据?
介绍
由于所有答案都是 5 年前的,我觉得有责任写下今天发生的事情。我严重怀疑是否应该读取流的魔术字节!这是一个低级代码,通常应该避免。
简单回答
米库写道:
如果可以通过 ZipInputStream 读取 Stream,则应该对其进行压缩。
是的,但是如果出现以下情况ZipInputStream
“可以读取”意味着首先调用.getNextEntry()
返回一个非空值。捕捉等也不例外。因此,您可以这样做,而不是魔术字节解析:
boolean isZipped = new ZipInputStream(yourInputStream).getNextEntry() != null;
就是这样!
一般解压思路
一般来说,在[解]压缩时处理文件似乎比处理流要方便得多。有几个有用的库,而且 ZipFile 比 ZipInputStream 具有更多功能。这里讨论 zip 文件的处理:用于压缩/解压缩文件的优秀 Java 库是什么? https://stackoverflow.com/questions/9324933/what-is-a-good-java-library-to-zip-unzip-files因此,如果您可以处理文件,那么您最好这样做!
代码示例
我需要在我的应用程序中仅使用流。这就是我写的解压方法:
import org.apache.commons.io.IOUtils;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public boolean unzip(InputStream inputStream, File outputFolder) throws IOException {
ZipInputStream zis = new ZipInputStream(inputStream);
ZipEntry entry;
boolean isEmpty = true;
while ((entry = zis.getNextEntry()) != null) {
isEmpty = false;
File newFile = new File(outputFolder, entry.getName());
if (newFile.getParentFile().mkdirs() && !entry.isDirectory()) {
FileOutputStream fos = new FileOutputStream(newFile);
IOUtils.copy(zis, fos);
IOUtils.closeQuietly(fos);
}
}
IOUtils.closeQuietly(zis);
return !isEmpty;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)