Java SE压缩与解压缩的流
CAMELLIA!!! note 目录
压缩与解压缩的流
一、.gz压缩与解压缩流
描述:
GZIPInputStream
用于读取GZIP格式的压缩数据,它解压从一个基础输入流读取的字节。
构造方法:
构造方法 |
描述 |
GZIPInputStream(InputStream in) |
创建一个使用默认缓冲区大小的GZIP输入流。 |
GZIPInputStream(InputStream in, int size) |
创建一个使用指定缓冲区大小的GZIP输入流。 |
常用方法:
方法 |
描述 |
int read(byte[] buf, int off, int len) |
从GZIP输入流中读取解压后的数据到缓冲区中。 |
void close() |
关闭GZIP输入流并释放所有相关的系统资源。 |
1.2 GZIPOutputStream
描述:
GZIPOutputStream
用于将数据压缩成GZIP格式,并写入到一个基础输出流中。
构造方法:
构造方法 |
描述 |
GZIPOutputStream(OutputStream out) |
创建一个使用默认缓冲区大小的GZIP输出流。 |
GZIPOutputStream(OutputStream out, int size) |
创建一个使用指定缓冲区大小的GZIP输出流。 |
常用方法:
方法 |
描述 |
void write(byte[] buf, int off, int len) |
将数据写入GZIP输出流进行压缩。 |
void finish() |
完成写入压缩数据,但不关闭输出流。 |
void close() |
关闭GZIP输出流并释放所有相关的系统资源。 |
1.3 示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| package com.camellia.io.CompressionDecompression;
import org.junit.jupiter.api.Test;
import java.io.*; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream;
public class GZIPInputOutputStreamTest {
@Test public void testGZIPInputStream() { try ( GZIPInputStream gzip = new GZIPInputStream(new FileInputStream("src/document/C程序设计(第五版) (谭浩强) (Z-Library).pdf.gz")); FileOutputStream out = new FileOutputStream("src/document/C程序设计(第五版) (谭浩强) (Z-Library).pdf") ) { byte[] buffer = new byte[1024]; int bytesRead;
while ((bytesRead = gzip.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
@Test public void testGZIPOutputStream() { try ( FileInputStream in = new FileInputStream("E:\\桌面临时缓存\\C程序设计(第五版) (谭浩强) (Z-Library).pdf"); GZIPOutputStream gzip = new GZIPOutputStream(new FileOutputStream("src/document/C程序设计(第五版) (谭浩强) (Z-Library).pdf.gz")) ) { byte[] buffer = new byte[1024]; int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) { gzip.write(buffer, 0, bytesRead); }
gzip.finish(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
|
二、.zip压缩与解压缩流
2.1 ZipOutputStream
描述:
ZipOutputStream
用于创建ZIP文件,并将多个文件压缩成单个ZIP文件。
构造方法:
构造方法 |
描述 |
ZipOutputStream(OutputStream out) |
创建一个使用指定输出流的ZIP输出流。 |
常用方法:
方法 |
描述 |
void putNextEntry(ZipEntry e) |
开始编写新的ZIP文件条目并定位流到条目数据的开始。 |
void closeEntry() |
完成当前ZIP条目的写入。 |
void write(byte[] buf, int off, int len) |
将数据写入当前ZIP条目。 |
void finish() |
完成写入压缩数据,但不关闭输出流。 |
void close() |
关闭ZIP输出流并释放所有相关的系统资源。 |
描述:
ZipInputStream
用于读取ZIP文件,并从中解压多个文件。
构造方法:
构造方法 |
描述 |
ZipInputStream(InputStream in) |
创建一个使用指定输入流的ZIP输入流。 |
常用方法:
方法 |
描述 |
ZipEntry getNextEntry() |
定位流到下一个ZIP条目并返回该条目。 |
void closeEntry() |
关闭当前ZIP条目并定位流到下一个条目。 |
int read(byte[] buf, int off, int len) |
从当前ZIP条目中读取解压后的数据到缓冲区中。 |
void close() |
关闭ZIP输入流并释放所有相关的系统资源。 |
2.3 示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| package com.camellia.io.CompressionDecompression;
import org.junit.jupiter.api.Test;
import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream;
public class ZipInputOutputStreamTest { private String sourceFilePath = "E:\\桌面临时缓存\\C程序设计(第五版) (谭浩强) (Z-Library).pdf"; private String zipFilePath = "src/document/C程序设计(第五版) (谭浩强) (Z-Library).pdf.zip"; private String extractedFilePath = "src/document/C程序设计(第五版) (谭浩强) (Z-Library) - extracted.pdf";
@Test public void testZipOutputStream() { try ( FileInputStream fis = new FileInputStream(sourceFilePath); ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFilePath)) ) { ZipEntry zipEntry = new ZipEntry(new File(sourceFilePath).getName()); zos.putNextEntry(zipEntry);
byte[] buffer = new byte[1024]; int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) { zos.write(buffer, 0, bytesRead); }
zos.closeEntry(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
@Test public void testZipInputStream() { try ( ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath)); FileOutputStream fos = new FileOutputStream(extractedFilePath) ) { ZipEntry zipEntry = zis.getNextEntry();
byte[] buffer = new byte[1024]; int bytesRead;
while ((bytesRead = zis.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); }
zis.closeEntry(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
|