2

ZIP アーカイブから XML ファイルを読み取ろうとしています。関連するコードは次のとおりです。

ZipInputStream zis = new ZipInputStream(is);
ZipEntry entry = zis.getNextEntry();
while(entry != null) {
    if(entry.getName().equals("plugin.xml")) {
        int size = (int)entry.getSize();
        byte[] bytes = new byte[size];
        int read = zis.read(bytes, 0, size);

        System.out.println("File size: " + size);
        System.out.println("Bytes read: " + read);
    }
}

これは、作業時に次のような出力を生成します。

File size: 5224
Bytes read: 5224

読み取られるplugin.xmlファイルは特別なものではなく、私が見つけたすべての XML 検証に合格しますが、XML ファイルへの小さな変更 (文字の削除、文字の追加など)により、入力ストリームから「読み取られたバイト数」ファイルサイズより小さい。この場合、上記と同じファイルの XML 属性のテキスト値を変更したところ、次の結果が得られました。

File size: 5218
Bytes read: 5205 // the reader stopped early!

どの XML ファイルが機能し、どの XML ファイルが機能しないかについて、パターンがわかりません。完全にランダムのようです。

誰かが前にこのようなものに出くわしたことがありますか?

編集:言い忘れましたが、plugin.xmlファイルを読み取るJavaコードは、私が変更できない既製のアプリケーションに埋め込まれています。私の問題は、場合によっては XML ファイルが受け入れられない理由を理解しようとしています。

4

2 に答える 2

3

InputStream.read()、またはその実装またはオーバーライドのいずれかがバッファをいっぱいにすることはどこにありますか?Javadocを確認してください。実際に言われていることは、read()EOSを示す-1を返すか、少なくとも1バイトをバッファーに読み込むということです。ループする必要があります。

于 2012-11-01T23:02:29.660 に答える