对传输数据的压缩
来源:互联网 发布:overlay网络百度百科 编辑:程序博客网 时间:2024/05/01 14:14
对传输数据的压缩
上次写了关于客户端与服务端传输数据的加密,但对大量数据加密操作要花费大量的时间,所以对于大量数据最好进行压缩后再加密,同时我们平时传输的数据如果太多也可以压缩后再传输,我们对zip加密方法对数据加密,先写代码:
public class ZipUtils { public static void main(String [] args){ String s = ""; //s中写出对应的字符串,下面我们对字符串的长度和格式进行分析 System.out.println(s.length()); String s1 = zip(s); System.out.println(s1.length()); String s2 = unzip(s1); System.out.println(s2.length()); }/** * 使用zip进行压缩 * * @param str * 压缩前的文本 * @return 返回压缩后的文本 */ public static final String zip(String str) { if (str == null) return null; byte[] compressed; ByteArrayOutputStream out = null; ZipOutputStream zout = null; String compressedStr = null; try { out = new ByteArrayOutputStream(); zout = new ZipOutputStream(out); zout.putNextEntry(new ZipEntry("0")); zout.write(str.getBytes()); zout.closeEntry(); compressed = out.toByteArray(); compressedStr = new sun.misc.BASE64Encoder().encodeBuffer(compressed); } catch (IOException e) { compressed = null; } finally { if (zout != null) { try { zout.close(); } catch (IOException e) { } } if (out != null) { try { out.close(); } catch (IOException e) { } } } return compressedStr; } /** * 使用zip进行解压缩 * * @param compressedStr * 压缩后的文本 * @return 解压后的字符串 */ public static final String unzip(String compressedStr) { if (compressedStr == null) { return null; } ByteArrayOutputStream out = null; ByteArrayInputStream in = null; ZipInputStream zin = null; String decompressed = null; try { byte[] compressed = new sun.misc.BASE64Decoder().decodeBuffer(compressedStr); out = new ByteArrayOutputStream(); in = new ByteArrayInputStream(compressed); zin = new ZipInputStream(in); zin.getNextEntry(); byte[] buffer = new byte[1024]; int offset = -1; while ((offset = zin.read(buffer)) != -1) { out.write(buffer, 0, offset); } decompressed = out.toString(); } catch (IOException e) { decompressed = null; } finally { if (zin != null) { try { zin.close(); } catch (IOException e) { } } if (in != null) { try { in.close(); } catch (IOException e) { } } if (out != null) { try { out.close(); } catch (IOException e) { } } } return decompressed; }}
我们来分析一下压缩的效率
如果我们的字符串很短,我们压缩的字符串会比原来的大
String s = “{[{\”username\”:\”123\”,\”password\”:\”1234123\”},{\”username\”:\”wer\”,\”password\”:\”sdffssdsf\”},{\”username\”:\”dew\”,\”password\”:\”122332r3er\”}]}”;
我们的到的结果:
128163128
但是如果我们的数据很多结果就不一样了,我们构造一个字符串
public static void main(String [] args){ String s4 = ""; for(int i=0; i<100; i++){ s4 = s4 + "{\"username\":" + Math.random()*100 + ",\"password\":" + UUID.randomUUID() + "},"; } s4 = s4.substring(0, s4.length()-1); s4 = "{[" + s4 + "]}"; System.out.println(s4.length()); String s1 = zip(s4); System.out.println(s1.length()); String s2 = unzip(s1); System.out.println(s2.length()); }
结果:
792647707926
我们可以看到当我们的数据很多时我们的压缩方法可以很大程度的减小字符的长度,但当我们的信息量不大时,压缩算法所构建的映射表的长度占的比重很大,压缩的字符串就比原来的字符串的长度长,所以我们在使用压缩算法时一定要判断数据的长度,要不然就不一定能够减小我们要传输的信息量。
1 0
- 对传输数据的压缩
- servlet 对传输数据进行压缩
- 是否需要对网络传输数据进行压缩?如何选择压缩算法?
- 使用Java实现网络传输数据的压缩.
- 使用Java实现网络传输数据的压缩
- 使用GZIP压缩的方式向客户端传输响应数据
- Nginx gzip对json数据的压缩
- 串口通信数据位长度对传输数据的影响
- 串口通信数据位长度对传输数据的影响
- 串口通信数据位长度对传输数据的影响
- 串口通信数据位长度对传输数据的影响
- 串口通信数据位长度对传输数据的影响
- 对通过网络传输的数据进行加密
- HTTP 传输内容的压缩
- HTTP 传输内容的压缩
- 文件的归档 压缩 传输
- UniGui如何实现压缩传输数据?
- java AES128加密压缩 模拟传输数据
- java中的转换流,OutputStreamWriter类与InputStreamReader
- 正则表达式
- android适配器
- Android activity的生命周期
- django中sql语句的查询
- 对传输数据的压缩
- C#绘图基础
- 动画(一)
- Http 四种请求访问代码 HttpGet HttpPost HttpPut HttpDelete
- java学习笔记之:java对称加密
- $.ajax()方法详解
- Ubuntu 12.04 在root登陆之后没有声音的解决方法
- /* 只支持IE6、7、8 */ @media \0screen\,screen\9 {...}
- 翻译随笔(1)——职场成功不仅需要技术高超