Получение данных XML из byteArray zipFile - PullRequest
0 голосов
/ 21 июля 2011

Я пишу простую программу, которая извлекает данные XML из объекта и анализирует их динамически на основе пользовательских критериев.У меня проблемы с получением данных XML из объекта из-за формата, в котором он доступен.

Объект, содержащий XML, возвращает данные в виде байтового массива zipFile, например, так.

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

// Вышеприведенный код возвращает byteArray zipFile

Способ, которым я проверял это, - записать byteArray в строку

    String str = new String(byteArray); 

// Вышеприведенный код возвращает строкусо странными символами.

Затем я записал данные в файл.

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

Я переименовал new.txt в new.zip.Когда я открыл его с помощью WinRAR, выскочил XML.

Моя проблема в том, что я не знаю, как выполнить это преобразование в Java с использованием потоков, без предварительной записи данных в zip-файл, а затемчитая это.Запись данных на диск сделает программное обеспечение слишком медленным.Любые идеи / фрагменты кода / информация, которую вы могли бы дать мне, будут очень признательны!Спасибо. Кроме того, если вам понадобится более подробное объяснение от меня, я с удовольствием уточню.

В качестве другого варианта мне интересно, будет ли XMLReader работать с ZipInputStream в качестве InputSource.

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

1 Ответ

3 голосов
/ 21 июля 2011

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)

...