5

.NET で gzip された Base64 文字列があり、それを Java の文字列に変換したいと考えています。特に、C# 構文に相当する Java を探しています。

  • Convert.FromBase64String
  • メモリーストリーム
  • GZipStream

変換したいメソッドは次のとおりです。

public static string Decompress(string zipText) {
    byte[] gzipBuff = Convert.FromBase64String(zipText);

    using (MemoryStream memstream = new MemoryStream())
    {
        int msgLength = BitConverter.ToInt32(gzipBuff, 0);
        memstream.Write(gzipBuff, 4, gzipBuff.Length - 4);

        byte[] buffer = new byte[msgLength];

        memstream.Position = 0;
        using (GZipStream gzip = new GZipStream(memstream, CompressionMode.Decompress))
        {
            gzip.Read(buffer, 0, buffer.Length);
        }
        return Encoding.UTF8.GetString(buffer);
     }
}

任意のポインタをいただければ幸いです。

4

2 に答える 2

5

Base64 の場合、Apache CommonsのBase64 クラスと、 を受け取ってを返すdecodeBase64メソッドがあります。Stringbyte[]

次に、結果byte[]を に読み取ることができますByteArrayInputStream。最後に、 を GZipInputStream に渡しByteArrayInputStream圧縮されていないバイトを読み取ります。


コードは次のようになります。

public static String Decompress(String zipText) throws IOException {
    byte[] gzipBuff = Base64.decodeBase64(zipText);

    ByteArrayInputStream memstream = new ByteArrayInputStream(gzipBuff);
    GZIPInputStream gzin = new GZIPInputStream(memstream);

    final int buffSize = 8192;
    byte[] tempBuffer = new byte[buffSize ];
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    while ((size = gzin.read(tempBuffer, 0, buffSize)) != -1) {
        baos.write(tempBuffer, 0, size);
    }        
    byte[] buffer = baos.toByteArray();
    baos.close();

    return new String(buffer, "UTF-8");
}

私はコードをテストしませんでしたが、おそらくいくつかの変更を加えれば動作するはずです。

于 2009-09-10T23:43:56.450 に答える
1

Base64 については、iHolder の実装をお勧めします。

GZipinputStreamは、GZip バイト配列を解凍するために必要なものです。

ByteArrayOutputStream は、バイトをメモリに書き出すために使用するものです。次に、バイトを取得し、それらを文字列オブジェクトのコンストラクターに渡して変換し、できればエンコーディングを指定します。

于 2009-09-10T23:49:49.283 に答える