Сжатие строки с использованием GZIPOutputStream - PullRequest
4 голосов
/ 19 июля 2011

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

Я написал метод Распаковка , и когда я отправляю в него строку .net в заархивированном виде, он работает правильно.Но метод Compress работает неправильно.

public static String Decompress(String zipText) throws IOException {
    int size = 0;
    byte[] gzipBuff = Base64.decode(zipText);

    ByteArrayInputStream memstream = new ByteArrayInputStream(gzipBuff, 4,
            gzipBuff.length - 4);
    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");
}

-

public static String Compress(String text) throws IOException {

    byte[] gzipBuff = EncodingUtils.getBytes(text, "UTF-8");

    ByteArrayOutputStream bs = new ByteArrayOutputStream();

    GZIPOutputStream gzin = new GZIPOutputStream(bs);

    gzin.write(gzipBuff);

    gzin.finish();
    bs.close();

    byte[] buffer = bs.toByteArray();

    gzin.close();

    return Base64.encode(buffer);
}

Например, когда я отправляю "BQAAAB + LCAAAAAAABADtvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee ++ 997o7nU4n99 // P1xmZAFs9s5K2smeIYCqyB8 / fnwfPyLmeVlW / ш + GphA2BQAAAA ==" в Распаковка метод Возвращает строку «Hello», но когда я отправляю «Hello» в Compress метод Возвращает "H4sIAAAAAAAAAMtIzcnJBwCGphA2BQAAAA ==" .

В чем проблема Сжатие метод ????

Ответы [ 2 ]

3 голосов
/ 13 ноября 2013

Проверка Использование Zip Stream и Base64 Encoder для сжатия больших строковых данных

о том, как использовать GZIPOutputStream / GZIInputStream и Base64 Encoder и Decoder для сжатия и распаковки больших строковых данных, чтобы он могпередается как текст в ответе http.

public static String compressString(String srcTxt) throws IOException {
  ByteArrayOutputStream rstBao = new ByteArrayOutputStream();
  GZIPOutputStream zos = new GZIPOutputStream(rstBao);
  zos.write(srcTxt.getBytes());
  IOUtils.closeQuietly(zos);

  byte[] bytes = rstBao.toByteArray();
  return Base64.encodeBase64String(bytes);
}

Или мы можем использовать Использовать Zip Stream и Base64 Encoder для сжатия больших строк данных , чтобы избежать загрузки всей строки в память.

public static String uncompressString(String zippedBase64Str) throws IOException {
  String result = null;
  byte[] bytes = Base64.decodeBase64(zippedBase64Str);
  GZIPInputStream zi = null;
  try {
    zi = new GZIPInputStream(new ByteArrayInputStream(bytes));
    result = IOUtils.toString(zi);
  } finally {
    IOUtils.closeQuietly(zi);
  }
    return result;
}
0 голосов
/ 19 июля 2011

Я пытался с Java VM, я думаю, что результат тот же. Используйте эту строку в конце вашего метода сжатия:

return new String(base64.encode(buffer), "UTF-8");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...