fil*_*lsa 1 java compression string
我使用专有的客户端/服务器消息格式来限制我可以通过网络发送的内容.我无法发送序列化对象,我必须将消息中的数据存储为String.我发送的数据是以逗号分隔的大值,我想在将数据打包为消息之前压缩数据.
我尝试使用Deflater/Inflater实现这一目标,但是在某个地方,我遇到了困难.
我正在使用以下两种方法进行放气/充气.但是,将compressString()方法的结果传递给decompressStringMethod()会返回null结果.
public String compressString(String data) {
Deflater deflater = new Deflater();
byte[] target = new byte[100];
try {
deflater.setInput(data.getBytes(UTF8_CHARSET));
deflater.finish();
int deflateLength = deflater.deflate(target);
return new String(target);
} catch (UnsupportedEncodingException e) {
//TODO
}
return data;
}
public String decompressString(String data) {
String result = null;
try {
byte[] input = data.getBytes();
Inflater inflater = new Inflater();
int inputLength = input.length;
inflater.setInput(input, 0, inputLength);
byte[] output = new byte[100];
int resultLength = inflater.inflate(output);
inflater.end();
result = new String(output, 0, resultLength, UTF8_CHARSET);
} catch (DataFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*n C 11
据我所知,您目前的做法是:
getBytes("UTF-8").new String(bytes, ..., "UTF-8").getBytes("UTF-8").new String(bytes, ..., "UTF-8").这种方法的问题在于步骤3.压缩字节数组时,您创建的字节序列可能不再是有效的UTF-8.结果将是步骤3中的例外.
解决方案是使用像Base64这样的"字节到字符"编码方案将压缩字节转换为可传输的字符串.换句话说,用调用Base64编码函数代替步骤3,用调用Base64解码函数代替步骤6.
笔记:
| 归档时间: |
|
| 查看次数: |
15233 次 |
| 最近记录: |