//导入bzip2.jar和jzlib相关java文件
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import org.apache.tools.bzip2.CBZip2InputStream;
import org.apache.tools.bzip2.CBZip2OutputStream;
import com.jcraft.jzlib.JZlib;
import com.jcraft.jzlib.ZInputStream;
import com.jcraft.jzlib.ZOutputStream;
public class Test {
/***
* 压缩GZip
*
* @param data
* @return
*/
public static byte[] gZip(byte[] data) {
byte[] b = null;
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(bos);
gzip.write(data);
gzip.finish();
gzip.close();
b = bos.toByteArray();
bos.close();
} catch (Exception ex) {
ex.printStackTrace();
}
return b;
}
/***
* 解压GZip
*
* @param data
* @return
*/
public static byte[] unGZip(byte[] data) {
byte[] b = null;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(data);
GZIPInputStream gzip = new GZIPInputStream(bis);
byte[] buf = new byte[1024];
int num = -1;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
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();
}
return b;
}
/***
* 压缩Zip
*
* @param data
* @return
*/
public static byte[] zip(byte[] data) {
byte[] b = null;
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(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();
}
return b;
}
/***
* 解压Zip
*
* @param data
* @return
*/
public static byte[] unZip(byte[] data) {
byte[] b = null;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(data);
ZipInputStream zip = new ZipInputStream(bis);
while (zip.getNextEntry() != null) {
byte[] buf = new byte[1024];
int num = -1;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
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();
}
return b;
}
/***
* 压缩BZip2
*
* @param data
* @return
*/
public static byte[] bZip2(byte[] data) {
byte[] b = null;
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
CBZip2OutputStream bzip2 = new CBZip2OutputStream(bos);
bzip2.write(data);
bzip2.flush();
bzip2.close();
b = bos.toByteArray();
bos.close();
} catch (Exception ex) {
ex.printStackTrace();
}
return b;
}
/***
* 解压BZip2
*
* @param data
* @return
*/
public static byte[] unBZip2(byte[] data) {
byte[] b = null;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(data);
CBZip2InputStream bzip2 = new CBZip2InputStream(bis);
byte[] buf = new byte[1024];
int num = -1;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
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();
}
return b;
}
/**
* 把字节数组转换成16进制字符串
*
* @param bArray
* @return
*/
public static String bytesToHexString(byte[] bArray) {
StringBuffer sb = new StringBuffer(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());
}
return sb.toString();
}
/**
* 压缩数据
*
* @param object
* @return
* @throws IOException
*/
public static byte[] jzlib(byte[] object) {
byte[] data = null;
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ZOutputStream zOut = new ZOutputStream(out,
JZlib.Z_DEFAULT_COMPRESSION);
DataOutputStream objOut = new DataOutputStream(zOut);
objOut.write(object);
objOut.flush();
zOut.close();
data = out.toByteArray();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
return data;
}
/**
* 解压被压缩的数据
*
* @param object
* @return
* @throws IOException
*/
public static byte[] unjzlib(byte[] object) {
byte[] data = null;
try {
ByteArrayInputStream in = new ByteArrayInputStream(object);
ZInputStream zIn = new ZInputStream(in);
byte[] buf = new byte[1024];
int num = -1;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
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();
}
return data;
}
public static void main(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:" + new String(b2));
byte[] b3 = bZip2(s.getBytes());
System.out.println("bZip2:" + bytesToHexString(b3));
byte[] b4 = unBZip2(b3);
System.out.println("unBZip2:" + new String(b4));
byte[] b5 = gZip(s.getBytes());
System.out.println("bZip2:" + bytesToHexString(b5));
byte[] b6 = unGZip(b5);
System.out.println("unBZip2:" + new String(b6));
byte[] b7 = jzlib(s.getBytes());
System.out.println("jzlib:" + bytesToHexString(b7));
byte[] b8 = unjzlib(b7);
System.out.println("unjzlib:" + new String(b8));
}
}
分享到:
相关推荐
1. `java.util.zip` 包:Java标准库提供了对ZIP和GZIP压缩的支持。`ZipOutputStream` 和 `ZipInputStream` 用于创建和读取ZIP文件,而 `GZIPOutputStream` 和 `GZIPInputStream` 则用于处理GZIP压缩。 2. Apache ...
ZipUtil 类提供了压缩和解压缩的方法,使用 BZip2OutputStream 将字符串压缩成 byte 数组,解压缩时使用 BZip2InputStream 将 byte 数组解压缩成字符串。 四、压缩和解压缩的应用场景 压缩和解压缩有很多实际应用...
常见的压缩算法有LZ77(如gzip)、Huffman编码、DEFLATE(如ZIP、PNG)、Burrows-Wheeler Transform(BWT,如bzip2)等。在Java中,`java.util.zip`包提供了对GZIP和ZIP格式的支持。理解这些算法的工作原理对于实现...
Java文件压缩与解压缩是Java开发中常见的操作,特别是在数据传输、...在实践中,还可以进一步研究其他压缩算法,如LZ4、BZip2等,以及第三方库如Apache Commons Compress,它们提供了更丰富的压缩选项和更好的性能。
除了Java自带的标准库之外,还可以考虑使用如Apache Commons Compress这样的第三方库来实现更多的压缩格式(如Gzip、Bzip2等)以及更复杂的压缩需求。 #### 4. 压缩与解压缩实践 在实践中,通常会结合Java标准库和...
在Java编程环境中,GZIP是一种常用的文件压缩格式,它基于DEFLATE算法,可以用于压缩和解压缩数据。...同时,了解其他压缩算法如DEFLATE、BZIP2或LZ4也是有益的,它们可能在特定场景下提供更好的性能或压缩效果。
Java解压缩技术是Java开发中常见的一种操作,主要用于处理ZIP、GZ、TAR等格式的压缩文件。在本文中,我们将深入探讨Java如何进行文件的解压缩,并提供相关的代码示例。 首先,Java标准库提供了`java.util.zip`包,...
其中,`SharpZipLib`是一个广泛使用的开源库,它提供了对ZIP、GZip、BZip2、Tar和7-Zip等格式的支持。在这个名为"C#压缩解压缩类库项目SharpZip.zip"的压缩包中,我们很可能会找到一个使用SharpZipLib库来实现C#压缩...
SharpZipLib是一个开源的压缩库,它提供了对多种压缩格式的支持,包括ZIP、GZip、BZip2等。要使用SharpZipLib,首先需要在项目中添加对它的引用。通常,我们可以从NuGet包管理器安装SharpZipLib,这样可以方便地引入...
GZ、BZ和BZ2文件是gzip、bzip2和bzip2的压缩格式,主要用于压缩文本文件。Java内置的`java.util.zip.GZIPInputStream`和`java.util.zip.GZIPOutputStream`处理GZ文件,而Apache Commons Compress库可以处理BZ和BZ2...
这时,一个常用的库就是ICSharpCode.SharpZipLib.dll,它是一个功能强大的开源库,提供了对多种压缩格式的支持,包括ZIP、GZip、BZip2、Tar和7-Zip等。本文将详细介绍这个库以及在Unity中的使用方法。 首先,让我们...
这个库是一个轻量级且功能强大的库,用于处理ZIP、GZip、BZip2和Tar格式的压缩和解压缩。本文将详细介绍如何使用ICSharpCode.SharpZipLib.dll来实现这些功能。 首先,你需要在项目中引入ICSharpCode.SharpZipLib....
这个库涵盖了多种压缩算法和文件格式,包括但不限于7z、AR、ARJ、BZip2、CPIO、DEFLATE、GZip、ISO9660、LHA、LRZIP、Pack200、PEF、TAR、XZ、Z、Zip、Zstd等。在本文中,我们将深入探讨如何使用Apache Commons ...
SharpZipLib是一个强大的C#库,它提供了对ZIP、GZip、BZip2、Tar和7-Zip等格式的全面支持。在这个案例中,我们将专注于使用SharpZipLib来处理ZIP文件的动态解压缩。首先,确保已经正确地将SharpZipLib库引入到项目中...
这个库是一个开源的C#实现的压缩库,支持多种压缩格式,包括ZIP、GZip、BZip2等。在C#中使用这个库,可以方便地进行文件或文件夹的压缩与解压缩。 首先,我们来详细了解一下ICSharpCode.SharpZipLib。这是一个由IC#...
ICSharpCode.SharpZipLib,简称SharpZipLib,是由IC#Code项目开发的一个强大的压缩和解压缩库,支持ZIP、GZIP、BZip2、Tar等多种格式。对于RAR文件的解压缩,SharpZipLib虽然原生不支持,但可以通过一些变通方法处理...
总的来说,Java中的BZIP2压缩可以通过Apache Commons Compress库方便地实现,无论是文件的压缩还是解压缩,都只需几行代码就能完成。这个库大大简化了开发者的工作,使得数据处理更加高效和便捷。在进行文件操作时,...
SharpZipLib是一个开源的压缩库,它提供了压缩和解压的功能,支持多种压缩格式,包括Zip、GZip、BZip2等。 SharpZipLib库是基于Java的Zip库的实现的,它提供了与Java中的Zip库相似的API,使得开发者可以轻松地在C#中...
SharpZipLib是一款开源的.NET库,它为C#和.NET Framework提供了广泛的压缩和解压缩功能,包括对ZIP、GZip、Tar、BZip2和7-Zip格式的支持。这个库非常实用,尤其对于那些需要在.NET环境中处理压缩文件的开发者来说。...
除了基础的解压缩功能,Java还允许我们处理更复杂的情况,如密码保护的ZIP文件、自解压的ZIP文件以及包含其他压缩格式(如GZIP或BZIP2)的ZIP条目。此外,还可以使用第三方库,如Apache Commons Compress或Google's ...