0

Java の GZip に問題があります。現在、gzip されたファイルを使用しています。1 つの gzip アーカイブに 1 つのファイル。そして、それらを手動で解凍してから解析すると、すべてが機能します。しかし、これを Java と GZipInputStream で自動化したいのですが、うまくいきません。最後に DataInputStream が必要です。私のコードは次のとおりです。

    byte[] bytesArray = Files.readAllBytes(baseFile.toPath());

    try {
        reader = new DataInputStream(new GZIPInputStream(new ByteArrayInputStream(bytesArray)));
        System.out.println("gzip");
    } catch (ZipException notZip) {
        reader = new DataInputStream(new ByteArrayInputStream(bytesArray));
        System.out.println("no gzip");
    }

new GZIPInputStream(new FileInputStream(baseFile)); も試しました。結果は同じです。出力により、Gzip ストリームが例外なく作成されることがわかりますが、後で DataInputStream から無効なデータを取得します。助けてください :)

4

2 に答える 2

0

問題なく次のコードを実行しました

public static void main(String[] args) throws IOException {
    byte[] originalBytesArray = Files.readAllBytes(new File("OrdLog.BR-1.17.2016-09-12.bin").toPath());
    byte[] bytesArray = Files.readAllBytes(new File("OrdLog.BR-1.17.2016-09-12.bin.gz").toPath());
    DataInputStream reader = null;
    try {
        reader = new DataInputStream(new GZIPInputStream(new ByteArrayInputStream(bytesArray)));
        System.out.println("gzip");
    } catch (ZipException notZip) {
        reader = new DataInputStream(new ByteArrayInputStream(bytesArray));
        System.out.println("no gzip");
    }
    byte[] uncompressedBytesArray = new byte[originalBytesArray.length];
    reader.readFully(uncompressedBytesArray);
    reader.close();
    boolean filesDiffer = false;
    for (int i = 0; i < uncompressedBytesArray.length; i++) {
        if (originalBytesArray[i] != uncompressedBytesArray[i]) {
            filesDiffer = true;
        }
    }
    System.out.println("Files differ: " + filesDiffer);
}

gzip ファイルと非圧縮ファイルを読み取り、内容を比較します。ファイルが異なる: false を出力します。ファイルが同じでない場合は、ファイルが同じではありません。

于 2016-09-15T07:57:53.557 に答える