消息压缩和解压缩
程序员文章站
2022-07-12 22:09:16
...
无线开发时,一方面出于给玩家节省流量的考虑,一方面为了加快网络传输速度,需要对过大的消息进行。消息字节大小小于256的压缩就没有太大意义,建议对大于1k的消息进行压缩处理,具体数据可以根据自己的业务进行设定。
参考java代码如下
参考java代码如下
/** * 对消息进行压缩,并返回压缩后的字节数组 * * @param bodyBuf * @return * @throws IOException */ private static byte[] compress(IoBuffer bodyBuf) throws IOException { ByteArrayOutputStream fos = new ByteArrayOutputStream(); ZipOutputStream zops = new ZipOutputStream(fos); try { zops.putNextEntry(new ZipEntry("t")); byte[] byteArr = new byte[bodyBuf.limit()]; bodyBuf.get(byteArr); zops.write(byteArr); } finally { zops.flush(); zops.close(); fos.flush(); fos.close(); } return fos.toByteArray(); } //解压缩 private static void decompress(byte[] bytes) throws IOException { ByteArrayInputStream bais = new ByteArrayInputStream(bytes); ZipInputStream zis = new ZipInputStream(bais); zis.getNextEntry(); int k = 0; int ir = -1; IoBuffer ioBuffer = IoBuffer.allocate(8192); ioBuffer.setAutoExpand(true); while ((ir = zis.read()) != -1) { k++; System.err.print(Integer.toHexString(ir) + " "); ioBuffer.put((byte) ir); } System.err.println("\nByteLength:" + k); ioBuffer.flip(); System.err.println("decompress:" + ioBuffer); }