C # для Java: Base64String, MemoryStream, GZipStream - PullRequest
4 голосов
/ 11 сентября 2009

У меня есть строка Base64, которая была сжата в .NET, и я хотел бы преобразовать ее обратно в строку в Java Я ищу некоторые эквиваленты Java для синтаксиса C #, в частности:

  • Convert.FromBase64String
  • MemoryStream
  • 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);
     }
}

Любые указатели приветствуются.

Ответы [ 2 ]

4 голосов
/ 11 сентября 2009

Для Base64 у вас есть Base64 класс от Apache Commons и метод decodeBase64, который принимает String и возвращает byte[].

Затем вы можете прочитать полученный результат byte[] в ByteArrayInputStream. Наконец, передайте ByteArrayInputStream в GZipInputStream и прочитайте несжатые байты.


Код выглядит примерно так:

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");
}

Я не тестировал код, но думаю, что он должен работать, возможно, с некоторыми изменениями.

1 голос
/ 11 сентября 2009

Для Base64 я рекомендую реализацию iHolder .

GZipinputStream - это то, что вам нужно для распаковки байтового массива GZip.

ByteArrayOutputStream - это то, что вы используете для записи байтов в память. Затем вы получаете байты и передаете их в конструктор строкового объекта для их преобразования, предпочтительно указав кодировку.

...