自己实现RMI(六)压缩与解压
来源:互联网 发布:淘宝拍卖手表骗局揭秘 编辑:程序博客网 时间:2024/04/25 06:38
当时在优化网络通信的时候,考虑到把序列化后的字符串压缩一下,体积减小,这样可能网络传输会快点。但是这个压缩过程比较耗时,而压缩解压带来的额外开销,和网络上直接传输体积稍微大的字符串,相比下来没什么优势(实际测试过了)。不过既然实践过了,还是留下一点痕迹吧。
// 压缩public static byte[] compress(String str) throws IOException { if (str == null || str.length() == 0) { return new byte[0]; } /* gzip压缩 ByteArrayOutputStream out = new ByteArrayOutputStream(); GZIPOutputStream gzip = new GZIPOutputStream(out); gzip.write(str.getBytes("UTF-8")); gzip.close(); return out.toByteArray();*/ byte[] output = new byte[0]; Deflater compresser = new Deflater(); byte[] data=str.getBytes(); compresser.reset(); compresser.setInput(data); compresser.finish(); ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length); try { byte[] buf = new byte[1024]; while (!compresser.finished()) { int i = compresser.deflate(buf); bos.write(buf, 0, i); } output = bos.toByteArray(); } catch (Exception e) { output = data; e.printStackTrace(); } finally { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } compresser.end(); return output; } // 解压缩public static String uncompress(byte[] data,int len) throws IOException { if (data == null || data.length == 0) { return null; } /* ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayInputStream in = new ByteArrayInputStream(data,0,len); GZIPInputStream gunzip = new GZIPInputStream(in); byte[] buffer = new byte[256]; int n; while ((n = gunzip.read(buffer)) >= 0) { out.write(buffer, 0, n); } // toString()使用平台默认编码,也可以显式的指定如toString("GBK") return out.toString("UTF-8");*/ byte[] output = new byte[0]; Inflater decompresser = new Inflater(); decompresser.reset(); decompresser.setInput(data,0,len); ByteArrayOutputStream o = new ByteArrayOutputStream(len); try { byte[] buf = new byte[1024]; while (!decompresser.finished()) { int i = decompresser.inflate(buf); o.write(buf, 0, i); } output = o.toByteArray(); }catch (Exception e) { output = data; e.printStackTrace(); } finally { try { o.close(); } catch (IOException e) { e.printStackTrace(); } } decompresser.end(); return o.toString(); } public static String mCompress(String src) throws IOException{if(src.length() <config.zipSize)return "--"+src;//添加压缩标志 byte[] out=compress(src);int i;String retString="++";//压缩标志for(i=0;i<out.length;i++){String hex = Integer.toHexString(out[i] & 0xFF);if (hex.length() == 1) { hex = '0' + hex; } retString +=hex.toUpperCase();}return retString;} /*** 压缩和解压的效率还是有点低* @param hexString* @return* @throws IOException*/public static String mUnCompress(String hexString)throws IOException{if(hexString.startsWith("--")) return hexString.substring(2);else if(hexString.startsWith("++")) hexString=hexString.substring(2);else { Log.log("compress error!"); return "";}hexString = hexString.toUpperCase(); int length = hexString.length() / 2; char[] hexChars = hexString.toCharArray(); byte[] d = new byte[length]; for (int i = 0; i < length; i++) { int pos = i * 2; d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); } return uncompress(d, d.length);}
- 自己实现RMI(六)压缩与解压
- java实现解压与压缩
- JAVA自己实现的文件压缩解压
- 六.压缩解压命令
- JAVA 实现文件(字符串)压缩与解压
- ASP 实现压缩与解压代码
- Java实现文件的压缩与解压
- JAVA API实现ZIP压缩与解压
- Android 实现 zlib压缩与解压
- Java实现文件压缩与解压
- Java实现文件的压缩与解压
- Java实现文件的压缩与解压
- 关于用java io实现文件压缩与解压(不涉及压缩算法)
- 自己实现RMI(一)基本原理
- 压缩解压哈夫曼树实现,
- 实现zip压缩解压
- GSM压缩/ 解压实现
- java实现压缩解压
- 关于Ognl一点警示
- Angel工作室精简版企业网站管理系统
- 关于memcpy
- gdb常用命令
- C语言变参的实现
- 自己实现RMI(六)压缩与解压
- 2012-08-29
- Cloudra Hadoop 发行版 (CDH4)
- php静态变量的妙用
- 【iphone开发】设置 NSZombieEnabled 定位 EXC_BAD_ACCESS 错误
- Android ListView图片异步加载显示
- 关于汇编、C++效率以及cache的思考
- bundle自动更新
- C# 异步UDP通讯