Как распаковать сжатые данные в байтовом массиве? - PullRequest
6 голосов
/ 07 ноября 2008

У меня есть класс, у которого есть метод, который получает объект в качестве параметра. Этот метод вызывается через RMI.

public RMIClass extends Serializable {
    public RMIMethod(MyFile file){
        // do stuff
    }
}

MyFile имеет свойство body, которое является байтовым массивом.

public final class MyFile implements Serializable {

    private byte[] body = new byte[0];
    //.... 

    public byte[] getBody() {
        return body;
    }
    //....
}

Это свойство содержит сжатые данные файла, который был проанализирован другим приложением.

Мне нужно распаковать этот байтовый массив перед выполнением дальнейших действий с ним.

Все примеры распаковки сжатых данных, которые я вижу, предполагают, что я хочу записать их на диск и создать физический файл, а я нет.

Как мне это сделать?

Заранее спасибо.

Ответы [ 4 ]

10 голосов
/ 07 ноября 2008

Оберните ваш байтовый массив ByteArrayInputStream и передайте его в GZipInputStream

1 голос
/ 07 ноября 2008

Посмотрите на эти примеры, и где бы они не использовали FileOutputStream, используйте взамен ByteArrayOutputStream. Везде, где они используют FileInputStream, используйте взамен ByteArrayInputStream. Остальное должно быть просто.

0 голосов
/ 16 мая 2019

Если вы хотите записать в ByteBuffer, вы можете сделать это.

private static void uncompress(final byte[] input, final ByteBuffer output) throws IOException
    {
        final GZIPInputStream inputGzipStream = new GZIPInputStream(new ByteArrayInputStream(input));
        Channels.newChannel(inputGzipStream).read(output);
    }
0 голосов
/ 07 ноября 2008

Почему бы вам не создать свой собственный класс, который расширяет OutputStream или что бы там ни записывалось в архив?

...