スレッド "main" で例外発生 java.util.zip.ZipException: GZIP形式ではありません
私のアプリケーションでGZIPストリームを使用してデータを圧縮/解凍しようとしていますが、文字セット "ISO-8859-1" を使用しているときはすべてうまくいきますが、文字セットを "UTF-8" に変更すると、エラー メッセージ "Exception in thread "main" java.util.zip.ZipException: not in GZIP format" が発生しました。コードは以下の通りです。
<ブロッククオート
public static String compress(String str) throws IOException {...
if (str == null || str.length() == 0) {.
strを返します。
}
System.out.println("String length : " + str.length())を実行します。
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out)。
gzip.write(str.getBytes())を実行します。
gzip.close()を実行します。
String outStr = out.toString("UTF-8");
System.out.println("Output String lenght : " + outStr.length()) を実行します。
System.out.println("Output : " + outStr.toString())を実行します。
はoutStrを返します。
}
public static String decompress(String str) throws IOException {...
if (str == null || str.length() == 0) {...
strを返します。
}
System.out.println("Input String length : " + str.length())を実行します。
GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(str.getBytes("UTF-8"))));
BufferedReader bf = new BufferedReader(new InputStreamReader(gis, "UTF-8"));
文字列 outStr = "";
文字列の行
while ((line=bf.readLine())! =null){。
outStr += line;
}
System.out.println("Output String lenght : " + outStr.length()) を実行します。
はoutStrを返します。
}
public static void main(String[] args) throws IOException {.
文字列 string = "私のデータ"。
System.out.println("after compress:")を実行します。
文字列 compressed = compress(文字列);
System.out.println(compressed)を実行します。
System.out.println("after decompress:")を実行します。
文字列 decomp = decompress(compressed)。
System.out.println(decomp)を実行します。
}
解決策は以下のように判明しました。
String outStr = out.toString("UTF-8"); "out" は zip で圧縮されたバイトストリームで、String としてエンコードしてから String からデコードすると、いくつかのバイトが失われることになります。これを解決するには、compress() でバイトを String としてエンコードして、たとえば次のように返します。
<ブロッククオートString infoBase64Encode = new String(Base64.encodeBase64(out.toByteArray()))
String() を伸長してバイトを返す、など。
文字列 infoBase64Decode = Base64.decodeBase64(decryptAESinfo)
コードの全文は以下の通りです。
public static String compress(String str) throws IOException {...
if (str == null || str.length() == 0) {.
strを返します。
}
System.out.println("String length : " + str.length())を実行します。
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out)。
gzip.write(str.getBytes())を実行。
gzip.close()を実行します。
String outStr = new String(Base64.encodeBase64(out.toByteArray()));
System.out.println("Output String lenght : " + outStr.length()) を実行します。
System.out.println("Output : " + outStr.toString())を実行します。
はoutStrを返します。
}public static String decompress(String str) throws IOException {...
if (str == null || str.length() == 0) {...
strを返します。
}
System.out.println("Input String length : " + str.length())を実行します。
GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(Base64.decodeBase64(str)));
文字列 outStr = ""。
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[256]です。
int n;
while ((n = gis.read(buffer))>=0){。
out.write(buffer, 0, n)を実行します。
}
System.out.println("Output String lenght : " + outStr.length()) を実行します。
return new String(out.toByteArray());
}public static void main(String[] args) throws IOException {.
文字列 string = "私のデータ"。
System.out.println("after compress:")を実行します。
文字列 compressed = compress(文字列);
System.out.println(compressed)を実行します。
System.out.println("after decompress:")を実行します。
文字列 decomp = decompress(compressed)。
System.out.println(decomp)を実行します。
}
関連
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例