压缩与解压都是针对字节数组来进行的。
内存数据压缩
java.util.zip.DeflaterOutputStream
压缩步骤
1.创建一个ByteArrayOutputStream byteArrayOutputStream;
2.调用DeflaterOutputStream deflaterOutputStream=DeflaterOutputStream(byteArrayOutputStream)构造函数;
3.调用deflaterOutputStream.write(待压缩字节数组);
4.byteArrayOutputStream.toByteArray()得到压缩后字节数组。
内存数据解压
java.util.zip.InflaterOutputStream
解压缩步骤
1.创建一个ByteArrayOutputStream byteArrayOutputStream;
2.调用InflaterOutputStream inflaterOutputStream=InflaterOutputStream (byteArrayOutputStream)构造函数;
3.inflaterOutputStream.write(待解压缩字节数组);
4.byteArrayOutputStream.toByteArray()得到解压缩后字节数组。
代码
文件压缩(undone)
java.util.zip.ZipOutputStream
此类代表压缩数据的输出流。
java.util.zip.ZipOutputStream.ZipOutputStream(OutputStream out)
构造函数,与OutputStream绑定。
java.util.zip.ZipEntry.ZipEntry(String name)
通过指定的名字创建新ZipEntry。
void java.util.zip.ZipOutputStream.putNextEntry(ZipEntry e) throws IOException
开始写入一个新的zipEntry,并界定了一个文件内容的起点。
void java.util.zip.ZipOutputStream.closeEntry()
关闭当前的zipEntry,并界定了写入下一个zipEntry的起点。
文件解压(undone)
java.util.zip.ZipInputStream
此类代表压缩数据的输入流。
ZipEntry java.util.zip.ZipInputStream.getNextEntry()
读下一个zipEntry,并界定了一个文件内容的起点。
ZipInputStream类继承自InputStream,它没有重写read(byte[]) 方法,该方法见下行:
int java.io.FilterInputStream.read(byte[] b)
返回读取到的字节数。-1表示流中的内容读取完毕。这个函数内部会调用read(byte[] b, int off, int len)函数,ZipInputStream类重写了该函数:
int java.util.zip.ZipInputStream.read(byte[] b, int off, int len)
读取当前zipEntry的内容,输出到b数组。