0

オブジェクトから XML データを取得し、ユーザーの条件に基づいて動的に解析する単純なプログラムを作成しています。利用可能な形式が原因で、オブジェクトから XML データを取得できません。

XML を含むオブジェクトは、データを zipFile の byteArray として返します。

    MyObject data = getData();
    byte[] byteArray = data.getPayload(); 

//上記は zipFile の byteArray を返します

これを確認する方法は、byteArray を文字列に書き込むことです。

    String str = new String(byteArray); 

//上記は、奇妙な文字を含む文字列を返します。

次に、データをファイルに書き込みました。

    FileOutputStream fos = new FileOutputStream("new.txt");
    fos.write(byteArray);

new.txt の名前を new.zip に変更しました。WinRAR を使用して開くと、XML が表示されました。

私の問題は、最初にデータをzipファイルに書き込んでから読み取らずに、ストリームを使用してJavaでこの変換を行う方法がわからないことです。データをディスクに書き込むと、ソフトウェアが非常に遅くなります。あなたが私に与えることができるアイデア/コードスニペット/情報は本当にありがたいです!! ありがとう また、私からのより良い説明が必要な場合は、喜んで詳しく説明します.

別のオプションとして、XMLReader が ZipInputStream を InputSource として使用できるかどうか疑問に思っています。

    ByteArrayInputStream bis = new ByteArrayInputStream(byteArray);
    ZipInputStream zis = new ZipInputStream(bis);
    InputSource inputSource = new InputSource(zis);
4

1 に答える 1

3

zip アーカイブには複数のファイルを含めることができます。コンテンツを解析する前に、zip ストリームを最初のエントリに配置する必要があります。

ByteArrayInputStream bis = new ByteArrayInputStream(byteArray);
ZipInputStream zis = new ZipInputStream(bis);
ZipEntry entry = zis.getNextEntry();
InputSource inputSource = new InputSource(new BoundedInputStream(zis, entry.getCompressedSize()));

BoundedInputStreamクラスは、Apache Commons IO (http://commons.apache.org/io) から取得されます。

于 2011-07-21T19:11:23.457 に答える