1

DeflateStreamを使用して、Visual Basicで圧縮された文字列を(Javaで)解凍しようとすると問題が発生します。私は少し調べて、InflaterとInflaterOutputStreamを使用してJavaで解凍する多くのコードを見て試しました。見つかったコードはどれも成功しませんでした。私はたくさんのサイトを調べて、グーグルでたくさんの方法で検索しました。Java、インフレータ/デフレータ圧縮、ビジュアルベーシック、デフレータストリームに関係するグーグルの最初の3ページはすでに読まれていると言えますが、成功していません。これが可能かどうか知りたいです(JavaとC#の間で圧縮/解凍する方法をここで見つけたのでそうする必要があります:http ://www.dreamincode.net/forums/topic/243808-compression-and- decompression-between-java-and-c%23 /)VisualBasicDeflateStreamとJavaアナログクラスInflater/Deflaterに関する互換性の問題があるかどうかも知りたいです。誰かが同様の問題を抱えている場合は、いくつかのコードスニペットも高く評価します。

ありがとう、ミハイ

4

3 に答える 3

1

Inflaterクラスでnowrapパラメータを設定してみてください。

ドキュメントによると、.NET DeflateStreamは、生のdeflate形式であるRFC1951を生成します。これがVisualBasicから使用しているものだと思います。

また、ドキュメントによると、JavaのInflaterクラスはzlib形式、RFC 1950をデコードします。zlib形式は、zlibヘッダーとトレーラーでラップされた生のdeflate形式です。通常、Inflaterクラスは、.NETのDeflateStreamからの生のdeflateデータで失敗します。ただし、幸いなことに、Inflaterクラスはコンストラクターにnowrapパラメーターを提供し(trueに設定されます)、これによりInflaterはzlibラッパーなしで生のdeflateデータをデコードできます。

だからそれはうまくいくはずです。DeflateStreamによって生成されたデータの16進数の最初の20バイトは何ですか?

于 2012-07-06T15:57:08.207 に答える
0

私が読んだところによると、javaのdeflate/inflateはZlibを使用しています。VBは何に膨らませるために使用しますか?私はこれをグーグルで検索できませんでしたが、いくつかの参照は、zlibではなくZIPを使用していることを示しているようです。

file compressed_file圧縮先のフォーマットを決定するために実行してみましたか?

いずれにせよ、ZIPアルゴリズムを使用して解凍するためにApacheCommonsを試してみることをお勧めします。

于 2012-07-06T15:32:17.373 に答える
0

さて、ようやくこれを解決することができました。初心者のミスでしたが、解決するのに十分な時間がかかりました。この問題は、(圧縮および暗号化された)初期ファイルを読み取るときに、バイトの配列としてコンテンツを直接読み取るのではなく、ファイルのコンテンツを文字列としてメモリに保持していたという事実によって表されました。そしてもちろん、一部のバイトは文字列エンコーディングでサポートされておらず、失われました。そのため、圧縮の形式が認識されませんでした。JavaのInflater/Deflaterクラスは、vb.netのDeflateStreamクラスと互換性があります。

あなたの助けと援助をどうもありがとう。

于 2012-07-10T08:20:33.090 に答える