java中的GZIP压缩学习(二)

这是修改之后的代码可以实现解压和压缩,注意数据的编码
	/**
	 * 数据压缩
	 * @param data
	 * @return
	 */
	public static byte[] dataCompress(byte[] data) {
		GZIPOutputStream gos;
		try {
			ByteArrayInputStream bais = new ByteArrayInputStream(data);
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			gos = new GZIPOutputStream(baos);
			
			byte[] buf = new byte[1024];
			int num;
			while ((num = bais.read(buf)) != -1) {
				gos.write(buf, 0, num);
			}
			gos.finish();
			gos.flush();
			gos.close();
			byte[] output = baos.toByteArray();  
			return output;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 数据解压缩
	 * @param data
	 * @return
	 */
	public static byte[] dataDecompress(byte[] data){
		try {
			ByteArrayInputStream bais = new ByteArrayInputStream(data);
			GZIPInputStream gis = new GZIPInputStream(bais);
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			byte[] buf = new byte[1024];
			int num;
			while((num=gis.read(buf))!=-1){
				baos.write(buf, 0, num);
			}
			gis.close();
			byte[] ret = baos.toByteArray();
			baos.close();
			return ret;
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	public static void main(String[] args) throws Exception {
		String a = "算法设计阿拉斯加分类啊沙发里的说法 啊大家都是垃圾发了疯啊";
		byte[] c = a.getBytes("UTF-8");
		System.out.println(c.length);
		byte[] d = compress(c);
		System.out.println(d.length);
		byte[] e = dataDecompress(d);
		System.out.println(e.length);
		System.out.println(new String(e,"UTF-8"));
	}

猜你喜欢

转载自zhangwe415.iteye.com/blog/1496793