1

以下は、1 つのファイルのみを含む zip ファイルからファイルを抽出するコードです。ただし、抽出されたファイルは、WinZip またはその他の zip ユーティリティを介して抽出された同じファイルと一致しません。ファイルに奇数のバイトが含まれている場合、1バイトずれている可能性があると思います(バッファーのサイズが2で、読み取りが失敗すると中止するためです)。ただし、(WinMerge または Diff を使用して) 以下のコードで抽出されたファイルと Winzip を介して抽出されたファイルを分析すると、Java 抽出からバイトが欠落している領域がいくつかあります。これを修正する理由または方法を誰かが知っていますか?

package zipinputtest;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.ZipInputStream;

public class test2 {
    public static void main(String[] args) {
        try {
            ZipInputStream zis = new ZipInputStream(new FileInputStream("C:\\temp\\sample3.zip"));
            File outputfile = new File("C:\\temp\\sample3.bin");
            OutputStream os = new BufferedOutputStream(new FileOutputStream(outputfile));
            byte[] buffer2 = new byte[2];
            zis.getNextEntry();
            while(true) {
                if(zis.read(buffer2) != -1) {
                    os.write(buffer2);
                }
                else break;
            }
            os.flush();
            os.close();
            zis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

この画像を使用してエラーを生成することはできましたが (画像を保存して sample3.zip として圧縮し、その上でコードを実行します)、十分なサイズのバイナリ ファイルには不一致が表示されるはずです。

ここに画像の説明を入力

4

2 に答える 2