[解決済み】Java: GZIPInputStreamの作成に失敗しました。GZIP形式ではありません
2022-01-30 07:23:18
質問
以下のJavaコードを使って、Stringを圧縮・解凍しようとしています。 しかし、新しいByteArrayInputStreamオブジェクトから新しいGZipInputStreamオブジェクトを作成する行は、 "java.util.zip.ZipExceptionを投げます。Not in GZIP format" 例外が発生します。 誰かこれを解決する方法を知っていますか?
String orig = ".............";
// compress it
ByteArrayOutputStream baostream = new ByteArrayOutputStream();
OutputStream outStream = new GZIPOutputStream(baostream);
outStream.write(orig.getBytes());
outStream.close();
String compressedStr = baostream.toString();
// uncompress it
InputStream inStream = new GZIPInputStream(new ByteArrayInputStream(compressedStr.getBytes()));
ByteArrayOutputStream baoStream2 = new ByteArrayOutputStream();
byte[] buffer = new byte[8192];
int len;
while((len = inStream.read(buffer))>0)
baoStream2.write(buffer, 0, len);
String uncompressedStr = baoStream2.toString();
解決方法は?
ミキシング
String
と
byte[]
しかし、それは決してフィットしません。また、同じOS、同じエンコーディングでなければ動作しません。すべての
byte[]
に変換することができます。
String
となり、逆変換すると他のバイトを与える可能性があります。
その
compressedBytes
はStringを表す必要はない。
でエンコーディングを明示的に設定する。
getBytes
と
new String
.
String orig = ".............";
// Compress it
ByteArrayOutputStream baostream = new ByteArrayOutputStream();
OutputStream outStream = new GZIPOutputStream(baostream);
outStream.write(orig.getBytes("UTF-8"));
outStream.close();
byte[] compressedBytes = baostream.toByteArray(); // toString not always possible
// Uncompress it
InputStream inStream = new GZIPInputStream(
new ByteArrayInputStream(compressedBytes));
ByteArrayOutputStream baoStream2 = new ByteArrayOutputStream();
byte[] buffer = new byte[8192];
int len;
while ((len = inStream.read(buffer)) > 0) {
baoStream2.write(buffer, 0, len);
}
String uncompressedStr = baoStream2.toString("UTF-8");
System.out.println("orig: " + orig);
System.out.println("unc: " + uncompressedStr);
関連
-
[解決済み] if / for / while 内で "Missing return statement" が発生する。
-
[解決済み】エラー:配列または java.lang.Iterable のインスタンスに対してのみ反復処理を行うことができます。
-
[解決済み】Mockitoでモックからチェックされた例外を投げる
-
[解決済み】-XX:MaxPermSizeは何をするのですか?
-
[解決済み】デフォルトのキーストアファイルが存在しない?
-
[解決済み】Javaメソッドスタブ
-
[解決済み] java.sql.SQLException を取得しました。ResultSet が終了した後の操作は許可されません。
-
[解決済み】接続Java - MySQL : 公開鍵の取得は許可されていません。
-
[解決済み] SQLエラー。0, SQLState: 08S01 通信リンクの失敗 [重複]。
-
[解決済み] JavaでYYYY-MM-DD HH:MI:Sec.Millisecond フォーマットで現在の時刻を取得する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み】宣言されたパッケージが期待されるパッケージと一致しない ""
-
[解決済み] 解決済み】Javaが「型をインスタンス化できない」というエラーを返す [重複] [重複]
-
[解決済み】 JAVA 変数宣言はここではできない
-
[解決済み] [Solved] java.lang.NoClassDefFoundError: クラスXXXを初期化できませんでした。
-
[解決済み] StringBuilderをクリアまたは空にするにはどうすればよいですか?重複] [重複] [重複] [重複] [重複] [重複
-
[解決済み] java.sql.SQLException を取得しました。ResultSet が終了した後の操作は許可されません。
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。