日々精進

新しく学んだことを書き留めていきます

ZipInputStream#readで読み込んだデータが途中で切れる

1KB程度以上のファイルをZipInputStream#readで読み込むと途中で切れてしまった。 原因はZipInputStream#readはファイルの最後までデータを読み込むことを保証していないため。 BufferedInputStreamを使うと最後まで読み込める。

コード例は以下。

        ZipInputStream zis = new ZipInputStream(is);
        ZipEntry zipEntry = zis.getNextEntry();
        String entryName = zipEntry.getName();
        byte[] content = new byte[(int) zipEntry.getSize()];
        BufferedInputStream bis = new BufferedInputStream(zis);
        bis.read(content, 0, content.length);

参考: