Как распаковать поток, дефлированный с помощью java.util.zip.Deflater в .NET? - PullRequest
3 голосов
/ 13 декабря 2011

У меня есть дамп после java.util.zip.Deflater (могу подтвердить, что он действителен, потому что Java Inflater прекрасно его открывает), и мне нужно открыть его в .NET:

byte[] content = ReadSample(sampleName);
var input = new MemoryStream(content);
var output = new MemoryStream();

using (var z = new System.IO.Compression.DeflateStream(input, CompressionMode.Decompress, true))
        z.CopyTo(output);

Это бросает

System.IO.InvalidDataException: длина блока не совпадает с его дополнение.

Пробовал Ionic.Zlib.DeflateStream - аналогичное исключение. Как я могу это сделать?

Дамп начинается с 97 86 E8 92 47 3D 40 EA (если это имеет значение).

Обновление: К сожалению, я не контролирую вечеринку Java, так как система находится в производстве.

Ответы [ 3 ]

1 голос
/ 13 декабря 2011

Чтобы разрешить платформо-зависимое сжатие и декомпрессию, используйте

Approach-1

В .NET вы можете использовать System.IO.Compression.GZipStream

В Java используется java.util.zip.GZIPOutPutStream

Подход-2

Вы также можете использовать 7-застежка-молния.Существует и SDK для c # и Java.

1 голос
/ 13 декабря 2011

Поскольку у вас нет контроля над выводом Java, как насчет интеграции некоторого J # в ваше приложение .NET для непосредственного использования java.util.zip.Inflater? См. эту статью MSDN .

Этот похожий вопрос также может быть полезен, особенно предложение # zipLib .

0 голосов
/ 13 декабря 2011

Я не верю, что Deflater и Inflater являются стандартными форматами, и я был бы удивлен, если бы они были одинаковыми в Java и C #.

Я бы предложил вам использовать стандартный формат, такой как GZIP, который должен быть одинаковым на всех платформах.

...