4

現在、以下のコードを使用して zip を別の zip 内にコピーしています。しかし、zip ファイルのサイズが大きくなると、たとえば 2GB になり、プログラムがメモリ不足のエラーをスローします。xmx を 1024 に増やしましたが、prfoblem は同じです。大きなファイルを処理しますか?

public static void zipFile(File srcFile, File zipFile)
            throws FileNotFoundException, IOException {
        BufferedInputStream origin = null;
        FileOutputStream dest = new FileOutputStream(zipFile);
        ZipOutputStream out = new ZipOutputStream(
                new BufferedOutputStream(dest));
        // out.setMethod(ZipOutputStream.DEFLATED);
        byte data[] = new byte[BUFFER];
        FileInputStream fi = new FileInputStream(srcFile);
        origin = new BufferedInputStream(fi, BUFFER);
        ZipEntry entry = new ZipEntry(srcFile.getName());
        out.putNextEntry(entry);
        int count;
        while ((count = origin.read(data, 0, BUFFER)) != -1) {
            out.write(data, 0, count);
        }
        origin.close();
        out.close();
    }
4

2 に答える 2

1

方法を試してみFileChannel.transferToませんか?より効率的です。これはOSレベルで行われるため、Javaヒープサイズに依存しないようにする必要があると思います。

それでも失敗する場合は、この質問を見てください。

于 2012-07-15T10:28:46.827 に答える
1

すぐに来るときにバイトをコピーしているだけです。どちらのファイルも Zip ファイルとして処理する必要はありません。バイトをコピーするだけです。

于 2012-07-15T10:52:29.697 に答える