欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

消息压缩和解压缩

程序员文章站 2022-07-09 13:20:52
...
    无线开发时,一方面出于给玩家节省流量的考虑,一方面为了加快网络传输速度,需要对过大的消息进行。消息字节大小小于256的压缩就没有太大意义,建议对大于1k的消息进行压缩处理,具体数据可以根据自己的业务进行设定。

参考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);
	}
相关标签: 压缩 解压缩