Размер zipInputStream всегда 512 байт? - PullRequest
0 голосов
/ 12 октября 2011
    private byte[] loadClassData(String className) {
    ZipInputStream in = null;
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(jarPath);
        in = new ZipInputStream(new BufferedInputStream(fis));
        ZipEntry entry;
        while ((entry = in.getNextEntry()) != null) {
            if (entry.getName().contains(".class")) {
                String outFileName = entry.getName()
                        .substring(0, entry.getName().lastIndexOf('.'))
                        .replace('/', '.');
                if (outFileName.equals(className)) {
                    if (entry.getSize() == -1) {
                        Log.e("loadClassData", "can't read the file!");
                        return null;
                    }
                    byte[] classData = new byte[(int) entry.getSize()];
                    in.read(classData);
                    return classData;
                }
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            fis.close();
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return null;
}

При отладке я всегда получаю размер "in" 512 байт, так что я не могу получить оставшуюся часть моего файла, и я не знаю почему. Есть ли у ZipInputStream ограничение размера? Спасибо!

1 Ответ

1 голос
/ 12 октября 2011
 if (entry.getSize() == -1) {

ZipEntry.getSize() Возвращает несжатый размер входных данных или -1, если неизвестно. .Вы должны удалить эту проверку.

Я всегда получаю размер "в" составляет 512 байт

Как вы это проверяете?ZipInputStream не имеет свойств размера.Все, что вы проверяете, не имеет отношения.

Этот кажется хорошим каноническим примером использования ZipInputStream.

...