`
pcpig
  • 浏览: 91818 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

消息压缩和解压缩

阅读更多
    无线开发时,一方面出于给玩家节省流量的考虑,一方面为了加快网络传输速度,需要对过大的消息进行。消息字节大小小于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);
	}
分享到:
评论
1 楼 pcpig 2013-07-10  
同事提醒:网络通讯用gzip由于没有文件结构,压缩效果更好
	private byte[] gzcompress(IoBuffer bodyBuf) throws IOException {
		byte[] byteArr = new byte[bodyBuf.limit()];
		bodyBuf.get(byteArr);
		ByteArrayOutputStream fos = new ByteArrayOutputStream();
		
		GZIPOutputStream zops = new GZIPOutputStream(fos);
		try {
			zops.write(byteArr);
		} finally {
			zops.flush();
			zops.close();
			fos.flush();
			fos.close();
		}
		byte[] m2 = fos.toByteArray();
		logger.debug("消息原始大小:" + byteArr.length /* + "方式1压缩后大小:" + m1.length */
				+ " 方式2压缩后大小:" + m2.length);
		return m2;
	}

相关推荐

    Huffman编码对英文文本的压缩和解压缩

    ### Huffman编码对英文文本的压缩和解压缩 #### 概述 Huffman编码是一种广泛应用于数据压缩领域的编码方法,尤其适用于英文文本的压缩与解压缩。这种方法基于变长编码原理,通过对不同字符出现频率的统计,构建出...

    压缩和解压缩ZIP

    压缩和解压缩类,添加到项目就可以了。方法直接传参数就可以完成压缩和解压缩。 注意的是必须用ZIP压缩工具压缩的文档才能解压。改后缀是不行的。

    实验4 Huffman编码对英文文本的压缩和解压缩.doc

    Huffman 编码对英文文本的压缩和解压缩 本实验的目的是掌握 Huffman 编码的原理,并使用 VC++ 6.0 开发环境来实现对英文文本的压缩和解压缩。实验要求学生掌握 Huffman 编码的原理、VC++ 开发环境的使用、C 语言...

    java实现霍夫曼(huffman)树的压缩和解压缩

    java实现霍夫曼(huffman)树的压缩和解压缩,支持对文档的压缩和解压缩

    pako gzip 压缩和解压缩(支持中文).rar

    pako是一个高性能的JavaScript库,它实现了多种压缩和解压缩算法,包括gzip。本项目着重介绍了如何使用pako库处理gzip压缩和解压缩,并且解决了中文字符在处理过程中的乱码问题。 gzip是一种广泛使用的数据压缩格式...

    Huffman 编码图像无损压缩和解压缩 Python示例代码 哈夫曼编码

    本程序实现了利用 Huffman 编码对图像进行无损压缩和解压缩。Huffman 编码是一种基于字符出现频率构建相应前缀码的无损数据压缩算法。 使用方法: 1. 需要安装 OpenCV 和 Numpy 库: pip install opencv-python ...

    Visual C++源代码 49 如何压缩和解压缩大尺寸文件

    Visual C++源代码 49 如何压缩和解压缩大尺寸文件Visual C++源代码 49 如何压缩和解压缩大尺寸文件Visual C++源代码 49 如何压缩和解压缩大尺寸文件Visual C++源代码 49 如何压缩和解压缩大尺寸文件Visual C++源代码...

    压缩和解压缩源码

    在IT行业中,压缩和解压缩技术是数据存储和传输领域不可或缺的一部分。压缩技术的主要目标是减少文件大小,以便更有效地存储或更快地传输数据。解压缩则是将已压缩的文件恢复到其原始形式的过程。本篇文章将深入探讨...

    火山移动编程压缩和解压缩数据

    下面将详细探讨火山移动编程在压缩和解压缩数据方面的知识点。 1. **压缩算法**: - 常见的压缩算法有:DEFLATE(用于ZIP和GZIP格式)、LZ77(Lempel-Ziv算法的基础)、LZ4、LZMA(Lempel-Ziv-Markov chain ...

    英文文件的压缩和解压缩

    《英文文件的压缩和解压缩》 在计算机领域,文件压缩和解压缩是常见的数据处理技术,用于减小文件的存储空间,提高传输效率。本文将深入探讨如何使用哈夫曼编码这一数据压缩方法来实现英文文件的压缩和解压缩,并...

    基于 C++实现对文件的压缩和解压缩->主要利用贪心算法实现压缩

    【作品名称】:基于 C++实现对文件的压缩和解压缩->主要利用贪心算法实现压缩 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目...

    基于javascript的压缩和解压缩以及文件系统的demo

    它可能包含了用于压缩和解压缩数据的算法,如Deflate和Inflate,这些算法通常用于ZIP格式。Deflate是ZIP文件中常用的压缩方法,而Inflate则是解压过程。 2. **HTML5 File System API**: - HTML5的File System API...

    文件压缩和解压缩

    文件压缩和解压缩是计算机领域中的重要技术,它允许我们减少文件占用的存储空间,加快数据传输,并在有限的存储资源下保存更多的信息。这里,我们将深入探讨这一主题,包括其工作原理、常用算法以及如何在编程中实现...

    压缩和解压缩的算法实例

    在IT领域,压缩和解压缩技术是数据存储和传输中不可或缺的一部分。压缩技术的主要目标是减少文件大小,以便更有效地存储或快速传输数据。解压缩则相反,它将已压缩的数据恢复到原始形式。这个“压缩和解压缩的算法...

    ASP.NET在线压缩和解压缩

    ### ASP.NET在线压缩和解压缩知识点详解 #### 标题:ASP.NET在线压缩和解压缩 此标题指出了一个在ASP.NET环境下实现的文件压缩与解压缩功能。ASP.NET是微软开发的一种服务器端脚本环境,它允许程序员使用C#、VB...

    pako gzip 压缩和解压缩(支持中文)

    在本项目中,我们将关注如何使用pako库进行gzip压缩和解压缩,并解决在处理中英文内容时可能出现的乱码问题。 首先,让我们详细了解pako库。pako是基于zlib库的一个轻量级实现,它在浏览器和Node.js环境中都能运行...

    .net 利用 GZipStream 压缩和解压缩

    在.NET框架中,`GZipStream`类是用于实现GZIP压缩和解压缩的主要工具。GZIP是一种广泛使用的数据压缩格式,它可以在网络传输时减少数据量,从而提高传输效率。`GZipStream`是.NET Framework提供的System.IO....

    c++哈夫曼编码压缩和解压缩

    草稿版代码 内容超详细 可压缩任何文件类型 本人亲测 但代码有些部分时间复杂度待优化

    使用Huffman对文件进行压缩和解压缩

    7. **HuffmanTest**:这个文件名可能是一个测试类,用于实现上述的压缩和解压缩过程。在Java中,可以使用`java.io`和`java.nio`包下的类进行文件操作,使用`java.util`包下的数据结构辅助实现Huffman算法。 实现...

    C++压缩和解压缩代码

    在“C++压缩和解压缩代码”这个主题中,我们主要关注的是如何在Linux环境下使用C++实现文件的压缩与解压缩功能。这涉及到对数据编码、存储效率以及文件操作的深入理解。 首先,压缩通常基于几种算法,如LZ77...

Global site tag (gtag.js) - Google Analytics