問題タブ [gzipoutputstream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - GZIPOutputStream が HTTP 応答の文字列を適切に圧縮しない
JSON データで応答する単純な Java http サーバーを作成しています。データを送信する前に GZip しようとしていますが、通常は gzip されたデータが返され、ブラウザーでエラーが発生します。たとえば、Firefox では次のように表示されます。
コンテンツ エンコーディング エラー 表示しようとしているページは、無効またはサポートされていない形式の圧縮を使用しているため、表示できません。
圧縮している文字列が特定の文字なしで小さい場合は機能することがありますが、括弧などがあると混乱するようです。特に、以下の例のテキストは失敗します。
これはある種の文字エンコーディングの問題ですか? いろいろ試してみましたが、なかなかうまくいきません。
java - GZIPOutputStreamへの文字列
検索してみましたが、何も見つかりませんでした。私がやろうとしているのは、複数のリストの項目の組み合わせから文字列を作成しているリストをループしていることです。次に、これらの文字列をgzip圧縮されたファイルにダンプします。プレーンなASCIIテキストファイルにダンプするだけで動作しましたが、gzipoutputstreamで動作するようには見えません。だから基本的に、
ループ作成文字列ダンプ文字列をgzip圧縮されたファイルendloopに
可能であれば、プレーンテキストファイルにダンプしてからgzipするのは避けたいと思います。これらのファイルは、それぞれほぼ100メガバイトになるからです。
java - GZIP 解凍文字列とバイト変換
コードに問題があります:
このコードは java.io.IOException: unknown format (マジック ナンバー ef1f) をスローします。
new String (b1)
バイトを変換すると、byte b [] = str.getBytes ()
バイトが「損なわれる」ことが判明しました。行の出力では、すでにバイト数が増えています。文字列への変換を回避し、バイトを含む行で作業すると、すべてが機能します。私の英語でごめんなさい。
この関数を使用して、サーバーの応答を解凍しています。手伝ってくれてありがとう。
java - GZIPOutputStream からの圧縮ファイルサイズの計算
ファイルを圧縮して出力ストリームに書き込んでいます。圧縮されたファイルのサイズを取得して応答ヘッダーに入れる方法
java - 別のスレッドで圧縮を行うGZIPOutputStream
別のスレッドで重い作業(圧縮+ディスクへの書き込み)を行うGZIPOutputStreamの実装はありますか?
大量のGZIP圧縮データを継続的に書き込んでいます。GZIPOutputStreamの代わりに使用できるドロップイン代替品を探しています。
java - Java - Deflater または GZIPOutputStream を使用した圧縮データの連結
データのブロックを取得し、このデータを圧縮し、最終的にそれらを 1 つの大きなバイト配列に連結するスレッドが多数あります。誰かがこのアイデアを拡張したり、別の方法を推奨したりできれば、それは素晴らしいことです. 現在、試している方法が 2 つありますが、どちらも本来の方法で機能していません。
最初の: 各スレッドのrun()
関数に入力データを取得させ、それを使用GZIPOutputStream
して圧縮し、バッファに書き込みます。
ここでのこのアプローチの問題は、各スレッドが を呼び出すと、より長い完全なデータの一部であるデータのブロックを 1 つ持つため、GZIPOutputStream
その小さなブロックを圧縮する完全なデータとして扱うことです。つまり、ヘッダーとトレーラーに貼り付けられます (カスタム辞書も使用しているため、ヘッダーが現在何ビットなのか、調べる方法もわかりません)。
ヘッダーとトレーラーを手動で切り取ることができ、圧縮されたデータが残るだけだと思います(最初のブロックのヘッダーと最後のブロックのトレーラーを残します)。この方法について私が確信していないもう1つのことは、それができるかどうかです。データの最初のブロックにヘッダーを残しても、正しく解凍されますか。そのヘッダーには、データの最初のブロックのみの情報が含まれており、他の連結されたブロックの情報は含まれていませんか?
2 番目の方法は、Deflater
クラスを使用することです。その場合、入力を設定し、辞書を設定してから、 を呼び出すだけdeflate()
です。
問題は、それが gzip 形式ではないことです。それは単なる「生の」圧縮データです。gzip が最終出力を認識できるようにする方法がわかりません。
java - GZIP オブジェクト入力、Java の読み方
ソケット経由で送信したいオブジェクトを取得しました。私が得た出力について:
そして、私が得た入力について:
Msg オブジェクトはシリアライズ可能です。
このコードを実行すると、クライアント接続が得られ、サーバーもデータを送信しますが、クライアントは入力の読み取りを開始しません
助言がありますか?
すべての返信ありがとう
java - 小さな文字列を圧縮する方法
重複の可能性:
短いテキスト文字列に最適な圧縮アルゴリズム
文字列の圧縮と解凍についてサポートが必要です。
小さい文字列を圧縮しようとすると、元のサイズよりも多くのバイトに変換されます。しかし、より大きな文字列を追加すると、より小さなバイトで圧縮されます。
私は以下に私のコードを与えています:
java - その場でフォルダーとそのサブフォルダーを gzip する
サブフォルダー階層に保存しながら、圧縮バージョンを送信したい大きなフォルダーがあります。
現在、大きなzipファイルを作成して送信することでそれを行っています。
フォルダーの内容を、ソケット出力ストリームにリダイレクトされる出力ストリームに書き込む方法を探しています。
私の動機は、実行時にマシンに大きなファイルを保持しないようにすることです
単一のファイルに対してそれを行う方法は知っていますが、多くのサブフォルダーを含むフォルダーを処理して内部階層を保存する方法がわかりません...
ありがとう!