我有一个JarInputStream(由包含JAR文件的字节数组构成)并且想要从中读取特定文件。所以我遍历包含ZipEntries并搜索文件。然后我尝试将文件写入字节数组。
但是,文件不知何故不能完全读取。如果我将它写入文件系统并在文本编辑器中打开它只是在前几行正确读取后包含NULL。
代码如下所示:
JarInputStream is = new JarInputStream(new ByteArrayInputStream(_jarFile));
ZipEntry entry = is.getNextEntry();
while (entry != null) {
if (entry.getName().endsWith(".xyz")) {
// read the *.xyz file and load it into a byte array
int size = (int) entry.getSize();
byte[] _xyzFile = new byte[size];
is.read(_xyzFile, 0, size);
break;
}
entry = is.getNextEntry();
}
is.close();
size
变量肯定包含正确的字节数,因此我不知道为什么在几行后停止读取。
答案 0 :(得分:4)
is.read(_xyzFile, 0, size);
不一定将size
个字节读入数组,但最多可读取size
个字节。该方法返回读取的实际字节数。
您必须实现一个循环以多次调用is.read
或使用任何提供此类功能的实用程序库,例如来自Apache Commons-IO的IOUtils.toByteArray(InputStream)
。