java压缩字符串_Java压缩字符串的方法收集

本文介绍了如何使用Java实现GZip、Zip、BZip2等数据压缩算法,以及对应的解压方法。通过实例展示了使用jzlib库进行JZlib压缩和解压的过程。适合开发者学习和理解不同压缩技术在实际项目中的应用。
摘要由CSDN通过智能技术生成

/***

* 压缩GZip

*

*@paramdata

*@return

*/

public static byte[] gZip(byte[] data) {byte[] b = null;try{

ByteArrayOutputStream bos= newByteArrayOutputStream();

GZIPOutputStream gzip= newGZIPOutputStream(bos);

gzip.write(data);

gzip.finish();

gzip.close();

b=bos.toByteArray();

bos.close();

}catch(Exception ex) {

ex.printStackTrace();

}returnb;

}/***

* 解压GZip

*

*@paramdata

*@return

*/

public static byte[] unGZip(byte[] data) {byte[] b = null;try{

ByteArrayInputStream bis= newByteArrayInputStream(data);

GZIPInputStream gzip= newGZIPInputStream(bis);byte[] buf = new byte[1024];int num = -1;

ByteArrayOutputStream baos= newByteArrayOutputStream();while ((num = gzip.read(buf, 0, buf.length)) != -1) {

baos.write(buf,0, num);

}

b=baos.toByteArray();

baos.flush();

baos.close();

gzip.close();

bis.close();

}catch(Exception ex) {

ex.printStackTrace();

}returnb;

}/***

* 压缩Zip

*

*@paramdata

*@return

*/

public static byte[] zip(byte[] data) {byte[] b = null;try{

ByteArrayOutputStream bos= newByteArrayOutputStream();

ZipOutputStream zip= newZipOutputStream(bos);

ZipEntry entry= new ZipEntry("zip");

entry.setSize(data.length);

zip.putNextEntry(entry);

zip.write(data);

zip.closeEntry();

zip.close();

b=bos.toByteArray();

bos.close();

}catch(Exception ex) {

ex.printStackTrace();

}returnb;

}/***

* 解压Zip

*

*@paramdata

*@return

*/

public static byte[] unZip(byte[] data) {byte[] b = null;try{

ByteArrayInputStream bis= newByteArrayInputStream(data);

ZipInputStream zip= newZipInputStream(bis);while (zip.getNextEntry() != null) {byte[] buf = new byte[1024];int num = -1;

ByteArrayOutputStream baos= newByteArrayOutputStream();while ((num = zip.read(buf, 0, buf.length)) != -1) {

baos.write(buf,0, num);

}

b=baos.toByteArray();

baos.flush();

baos.close();

}

zip.close();

bis.close();

}catch(Exception ex) {

ex.printStackTrace();

}returnb;

}/***

* 压缩BZip2

*

*@paramdata

*@return

*/

public static byte[] bZip2(byte[] data) {byte[] b = null;try{

ByteArrayOutputStream bos= newByteArrayOutputStream();

CBZip2OutputStream bzip2= newCBZip2OutputStream(bos);

bzip2.write(data);

bzip2.flush();

bzip2.close();

b=bos.toByteArray();

bos.close();

}catch(Exception ex) {

ex.printStackTrace();

}returnb;

}/***

* 解压BZip2

*

*@paramdata

*@return

*/

public static byte[] unBZip2(byte[] data) {byte[] b = null;try{

ByteArrayInputStream bis= newByteArrayInputStream(data);

CBZip2InputStream bzip2= newCBZip2InputStream(bis);byte[] buf = new byte[1024];int num = -1;

ByteArrayOutputStream baos= newByteArrayOutputStream();while ((num = bzip2.read(buf, 0, buf.length)) != -1) {

baos.write(buf,0, num);

}

b=baos.toByteArray();

baos.flush();

baos.close();

bzip2.close();

bis.close();

}catch(Exception ex) {

ex.printStackTrace();

}returnb;

}/*** 把字节数组转换成16进制字符串

*

*@parambArray

*@return

*/

public static String bytesToHexString(byte[] bArray) {

StringBuffer sb= newStringBuffer(bArray.length);

String sTemp;for (int i = 0; i < bArray.length; i++) {

sTemp= Integer.toHexString(0xFF &bArray[i]);if (sTemp.length() < 2)

sb.append(0);

sb.append(sTemp.toUpperCase());

}returnsb.toString();

}/***jzlib 压缩数据

*

*@paramobject

*@return*@throwsIOException*/

public static byte[] jzlib(byte[] object) {byte[] data = null;try{

ByteArrayOutputStream out= newByteArrayOutputStream();

ZOutputStream zOut= newZOutputStream(out,

JZlib.Z_DEFAULT_COMPRESSION);

DataOutputStream objOut= newDataOutputStream(zOut);

objOut.write(object);

objOut.flush();

zOut.close();

data=out.toByteArray();

out.close();

}catch(IOException e) {

e.printStackTrace();

}returndata;

}/***jzLib压缩的数据

*

*@paramobject

*@return*@throwsIOException*/

public static byte[] unjzlib(byte[] object) {byte[] data = null;try{

ByteArrayInputStream in= newByteArrayInputStream(object);

ZInputStream zIn= newZInputStream(in);byte[] buf = new byte[1024];int num = -1;

ByteArrayOutputStream baos= newByteArrayOutputStream();while ((num = zIn.read(buf, 0, buf.length)) != -1) {

baos.write(buf,0, num);

}

data=baos.toByteArray();

baos.flush();

baos.close();

zIn.close();

in.close();

}catch(IOException e) {

e.printStackTrace();

}returndata;

}public static voidmain(String[] args) {

String s= "this is a test";byte[] b1 =zip(s.getBytes());

System.out.println("zip:" +bytesToHexString(b1));byte[] b2 =unZip(b1);

System.out.println("unZip:" + newString(b2));byte[] b3 =bZip2(s.getBytes());

System.out.println("bZip2:" +bytesToHexString(b3));byte[] b4 =unBZip2(b3);

System.out.println("unBZip2:" + newString(b4));byte[] b5 =gZip(s.getBytes());

System.out.println("bZip2:" +bytesToHexString(b5));byte[] b6 =unGZip(b5);

System.out.println("unBZip2:" + newString(b6));byte[] b7 =jzlib(s.getBytes());

System.out.println("jzlib:" +bytesToHexString(b7));byte[] b8 =unjzlib(b7);

System.out.println("unjzlib:" + newString(b8));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值