【java】文字列の圧縮トランスコードbase 64

2414 ワード

クライアントとサービス間ではウェブサービス方式で伝送されるためである.
その後、大きな文字列を転送すると、遅い問題が発生します.
例えば私たちはテストしました.2 wのデータです.約60 m以上の文字列を転送するのに7~8秒かかります.
そこで,圧縮とトランスコードを用いて伝送を行うことを考慮した.
相手がデータを受け取ったらコードを反転してから解凍します.
以下はjavaを使って自分で完成する機能です.
package com.duduli.li.zip;

import java.io.ByteArrayOutputStream;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.InflaterOutputStream;

import org.apache.commons.codec.binary.Base64;


public class ZipWithZlib {

//
public static String compressData(String data) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DeflaterOutputStream zos = new DeflaterOutputStream(bos);
zos.write(data.getBytes());
zos.close();
return new String(getenBASE64inCodec(bos.toByteArray()));
} catch (Exception ex) {
ex.printStackTrace();
return "ZIP_ERR";
}
}

// apche codec encode
public static String getenBASE64inCodec(byte [] b) {
if (b == null)
return null;
return new String((new Base64()).encode(b));
}




// base64 string

public static byte[] getdeBASE64inCodec(String s) {
if (s == null)
return null;
return new Base64().decode(s.getBytes());
}

//
public String decompressData(String encdata) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
InflaterOutputStream zos = new InflaterOutputStream(bos);
zos.write(getdeBASE64inCodec(encdata));
// byte [] b = encdata.getBytes();
// int len = b.length;
// zos.write(b, 0, len);
// zos.write(getdeBASE64(encdata.getBytes()),0,(encdata.getBytes()).length);
zos.close();
return new String(bos.toByteArray());
} catch (Exception ex) {
ex.printStackTrace();
return "UNZIP_ERR";
}
}


public static void main(String[] args) {
ZipWithZlib zwz = new ZipWithZlib();
String compString = zwz.compressData(" ");
System.out.println(compString);

String decompString = zwz.decompressData(compString);
System.out.println(decompString);

}
}

ここでbase 64のトランスコードはapacheのcodecパケットをインポートする必要があり、sunのパケットは使用できません.
なぜならsunのバッグはファイルが大きすぎるときに自分で折り返し行を入れるからです.