文件未从 JarInputStream 中完全读取

ubu*_*oid 2 java io jar

我有一个 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();
Run Code Online (Sandbox Code Playgroud)

size变量肯定包含正确的字节数,所以我不知道为什么读取在几行后就停止了。

jar*_*bjo 5

is.read(_xyzFile, 0, size);不一定将size字节读入数组,但最多读入size字节。该方法返回实际读取的字节数。

您必须实现一个循环来is.read多次调用或使用任何提供此类功能的实用程序库,例如IOUtils.toByteArray(InputStream)来自 Apache Commons-IO 的库。