Java中文件的压缩和解压
Java中提供了 DeflaterOutputStream 和 InflaterInputStream 类来压缩和解压缩文件内容。这些类提供了可用于压缩文件内容的有用方法。
使用 DeflaterOutputStream 压缩文件
此类实现了一个输出流过滤器,用于以“deflate”压缩格式压缩数据。它还用作其他类型的压缩过滤器的基础,例如 GZIPOutputStream。
重要方法:
- void close() :将剩余的压缩数据写入输出流并关闭底层流。
- protected void deflate() :将下一个压缩数据块写入输出流。
- void finish() :在不关闭底层流的情况下完成将压缩数据写入输出流。
- void flush() :刷新压缩的输出流。
- void write(byte[] b, int off, int len) :将字节数组写入压缩输出流,其中 off 是数据的起始偏移量,len 是总字节数。
- void write(int b) :将一个字节写入压缩输出流。
压缩文件的步骤(文件 1)
- 将输入文件“文件 1”带到 FileInputStream 以读取数据。
- 获取输出文件“文件 2”并将其分配给 FileOutputStream 。这将有助于将数据写入“file2”。
- 将 FileOutputStream 分配给 DeflaterOutputStream 以压缩数据。
- 现在,从 FileInputStream 读取数据并将其写入 DeflaterOutputStream。它将压缩数据并将其发送到 FileOutputStream,后者将压缩数据存储到输出文件中。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
class zip
{
public static void main(String[] args) throws IOException {
//Assign the original file : file to
//FileInputStream for reading data
FileInputStream fis=new FileInputStream("file1");
//Assign compressed file:file2 to FileOutputStream
FileOutputStream fos=new FileOutputStream("file2");
//Assign FileOutputStream to DeflaterOutputStream
DeflaterOutputStream dos=new DeflaterOutputStream(fos);
//read data from FileInputStream and write it into DeflaterOutputStream
int data;
while ((data=fis.read())!=-1)
{
dos.write(data);
}
//close the file
fis.close();
dos.close();
}
}
使用 InflaterInputStream 解压文件
此类实现了一个流过滤器,用于以“deflate”压缩格式解压缩数据。它也被用作其他解压过滤器的基础,例如 GZIPInputStream。
重要方法:
- int available() :到达 EOF 后返回 0,否则总是返回 1。
- void close() :关闭输入流并释放与该流关联的所有系统资源。
- protected void fill() :用更多要解压缩的数据填充输入缓冲区。
- void mark(int readlimit) :标记输入流中的当前位置。
- boolean markSupported() :测试输入流是否支持 mark 和 reset 方法。
- int read() :读取一个字节的未压缩数据。
- int read(byte[] b, int off, int len) :将解压后的数据读入到压缩输出流的字节数组中,其中 off 是数据的起始偏移量,len 是总字节数。
- void reset() :将此流重新定位到最后一次在此输入流上调用标记方法时的位置。
解压文件的步骤
- 名称为“file2”的文件现在包含压缩数据,我们需要从该文件中获取原始解压缩数据。
- 将压缩文件“file2”分配给 FileInputStream。这有助于从“file2”中读取数据。
- 将输出文件“file3”分配给 FileOutputStream。这将有助于将未压缩的数据写入“file3”。
- 现在,从 InflaterInputStream 读取未压缩的数据并将其写入 FileOutputStream。这会将未压缩的数据写入“file3”。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.InflaterInputStream;
//Uncompressing a file using an InflaterInputStream
class unzip
{
public static void main(String[] args) throws IOException {
//assign Input File : file2 to FileInputStream for reading data
FileInputStream fis=new FileInputStream("file2");
//assign output file: file3 to FileOutputStream for reading the data
FileOutputStream fos=new FileOutputStream("file3");
//assign inflaterInputStream to FileInputStream for uncompressing the data
InflaterInputStream iis=new InflaterInputStream(fis);
//read data from inflaterInputStream and write it into FileOutputStream
int data;
while((data=iis.read())!=-1)
{
fos.write(data);
}
//close the files
fos.close();
iis.close();
}
}