【JAVA入门】Day45 - 压缩流 / 解压缩流

【JAVA入门】Day45 - 压缩流 / 解压缩流


文章目录

  • 【JAVA入门】Day45 - 压缩流 / 解压缩流
    • 一、解压缩流
    • 二、压缩流


        在文件传输过程中,文件体积比较大,传输较慢,因此我们发明了一种方法,把文件里的数据压缩到一种压缩文件中,将体积减小,传输完毕后,再用解压缩方法把数据解压出来。这就是压缩流和解压缩流的诞生初衷。
        解压缩流和压缩流在体系中的位置如下,它们是字节输入输出流的高级包装类。
在这里插入图片描述

一、解压缩流

        解压的本质是把压缩包中的每一个 ZipEntry 对象(压缩包中的每一个文件都是一个 ZipEntry 对象)按照层级拷贝到本地的另一个文件夹中。
        解压缩流是把文件中的内容读入 JVM,因此它属于输入流。
        下面的代码演示了如何将一个本地 zip 文件解压。

package ZipStream;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;public class ZipStreamDemo1 {public static void main(String[] args) throws IOException {/*解压缩流D:\IdeaProjects\HelloWord\src\ZipStream\ZipFile.zip*///1.创建一个File表示要解压的压缩包File src = new File("D:\\IdeaProjects\\HelloWord\\src\\ZipStream\\ZipFile.zip");//2.创建一个File表示解压的目的地File dest = new File("D:\\IdeaProjects\\HelloWord\\src\\ZipStream");unzip(src,dest);}//定义一个方法用来解压public static void unzip(File src, File dest) throws IOException {//解压的本质:把压缩包中的每一个文件或者文件夹读取出来//按照层级拷贝到目的地当中//创建一个解压缩流用来读取压缩包中的数据ZipInputStream zip = new ZipInputStream(new FileInputStream(src));//先获取到压缩包中的每一个 zipEntry 对象ZipEntry entry;while ((entry = zip.getNextEntry()) != null) {System.out.println(entry);//遍历到了文件夹:在目的地处创建一个同名文件夹//文件:把它存放到目的地的dest文件夹中if (entry.isDirectory()) {//文件夹:在dest处创建一个同名文件夹File file = new File(dest, entry.toString());file.mkdirs();} else {//文件:读取文件中的数据,存放到目的地destFileOutputStream fos = new FileOutputStream(entry.toString());int b;while ((b = zip.read()) != -1) {//写到目的地fos.write(b);}fos.close();//表示在压缩包中的一个文件处理完毕了zip.closeEntry();}}zip.close();}
}

二、压缩流

        压缩的本质其实就是把每一个(文件/文件夹)看成 ZipEntry 对象放到压缩包中。
        利用压缩流压缩一个文件的代码如下所示:

package ZipStream;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class ZipStreamDemo2 {public static void main(String[] args) throws IOException {/*压缩流把a.txt打包成一个压缩包*///1.创建File对象表示要压缩的文件File src = new File("D:\\IdeaProjects\\HelloWord\\src\\ZipStream\\a.txt");//2.创建File对象表示压缩包的位置File dest = new File("D:\\IdeaProjects\\HelloWord\\src\\ZipStream");//3.调用方法来压缩toZip(src,dest);}public static void toZip(File src, File dest) throws IOException {//1.创建压缩流关联压缩包ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(dest,"a.txt")));//2.把要压缩的文件看成一个个的Entry对象,表示压缩包里的每一个文件和文件夹ZipEntry entry = new ZipEntry("a.txt");//3.把ZipEntry对象放到压缩包当中zos.putNextEntry(entry);//4.把src文件中的数据写到压缩包当中FileInputStream fis = new FileInputStream(src);int b;while((b = fis.read()) != -1){zos.write(b);}zos.closeEntry();zos.close();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[苍穹外卖]-10WebSocket入门与实战

WebSocket WebSocket是基于TCP的一种新的网络协议, 实现了浏览器与服务器的全双工通信, 即一次握手,建立持久连接,双向数据传输 区别 HTTP是短连接, WebSocket是长连接HTTP单向通信, 基于请求响应模型WebSocket支持双向通信 相同 HTTP和WebSocket底层都是TCP连接 应用场景…

JVM 调优篇7 调优案例1-堆空间的优化解决

一 jvm优化 1.1 优化实施步骤 1)减少使用全局变量和大对象; 2)调整新生代的大小到最合适; 3)设置老年代的大小为最合适; 4)选择合适的GC收集器; 1.2 关于GC优化原则 多数的Java应用不需要在服务器上进行GC优化&#xff1b…

Java中的Lambda表达式和Stream API详解

在现代Java开发中,Lambda表达式和Stream API是简化代码、提高可读性和开发效率的关键工具。Java 8引入的这两大功能不仅增强了语言的表达力,还大幅提升了处理集合和数据流的能力。本文将详细解析Lambda表达式和Stream API的使用方法,并结合实…

FreeRTOS常用API接口函数

提示:FreeRTOS常用API接口函数:并对部分参数附上自己的解释,后面继续补充 FreeRTOS常用API接口函数 1.任务相关的API1.1 创建任务:xTaskCreate1.2 开启任务调度器函数:vTaskStartScheduler1.3 任务的删除:vTaskDelete1…

Android Service服务使用方法

启动服务的方法 我们要隐式启动一个Service&#xff0c;首先我们需要配置AndroidMainfest.xml <service android:name".MyAsdlService"><intent-filter><action android:name"com.example.myasdlservice" /></intent-filter><…

Rollup 插件机制深入学习

插件系统的核心 Rollup 的插件系统是其强大功能的一部分&#xff0c;能够让开发者通过插件定制打包过程。插件的核心包括&#xff1a; Graph&#xff1a;Rollup 的全局图形表示&#xff0c;用于管理入口点及其依赖关系。PluginDriver&#xff1a;插件驱动器&#xff0c;负责调…

【ArcGISProSDK】初识

ArcGIS Pro SDK 提供四种主要的可扩展性模式&#xff1a;加载项、托管配置、插件数据源和 CoreHost 应用程序。 各模块文件对比 API 核心 核心程序集位于 {ArcGIS Pro 安装文件夹}\bin 中。 程序集描述ArcGIS.Core.dll 提供 CIM、地理数据库、几何图形和公共设施网络 API。 …

Prometheus+grafana监控spring boot 3运行情况

使用Prometheus和Grafana来监控Spring Boot 3应用的运行情况是一种强大的监控策略&#xff0c;可以帮助你了解应用的性能、健康状况以及潜在的问题。以下是如何配置这种监控系统的基本步骤&#xff1a; 1. Spring Boot 应用配置 首先&#xff0c;确保你的Spring Boot 3应用已…

Notepad++插件:TextFX 去除重复行

目录 一、下载插件 TextFX Characters 二、去重实操 2.1 选中需要去重的文本 2.2 操作插件 2.3 结果展示 2.3.1 点击 Sort lines case sensitive (at column) 2.3.2 点击 Sort lines case insensitive (at column) 一、下载插件 TextFX Characters 点【插件】-【插件管理…

从头开始学MyBatis—02基于xml和注解分别实现的增删改查

首先介绍此次使用的数据库结构&#xff0c;然后引出注意事项。 通过基于xml和基于注解的方式分别实现了增删改查&#xff0c;还有获取参数值、返回值的不同类型对比&#xff0c;帮助大家一次性掌握两种代码编写能力。 目录 数据库 数据库表 实体类 对应的实体类如下&#x…

JS 扩展运算符有哪些使用场景?

你好&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注。 扩展运算符有哪些使用场景&#xff1f;直接进入正题 一、复制数组 const a1 [1, 2];// 写法一 const a2 [...a1]; // 写法二 const [...a2] a1;二、合并数组 const part1 [1, 2, 3]; const part2 …

golang学习笔记16——golang部署与运维全攻略

推荐学习文档 golang应用级os框架&#xff0c;欢迎star基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总golang学习笔记01——基本数据类型golang学习笔记02——gin框架及基本原理golang学习笔记03——gin框架的核心数据结构golang学…

【C++基础概念理解——类的继承和嵌套】

基本概念 在 C 中&#xff0c;类的继承和嵌套类的定义是两种不同的概念。 class InitialSetupProcedure : public StateMachine //类的继承(符号是":")class InitialSetupProcedure::StateMachine //类的嵌套(符号是"::"&#xff0c;意思是类StateMach…

深度学习和计算机视觉:实现图像分类

深度学习在计算机视觉领域的应用已经取得了革命性的进展。从图像分类到对象检测&#xff0c;再到图像分割和生成&#xff0c;深度学习模型在这些任务中都展现出了卓越的性能。本篇文章将介绍如何使用深度学习进行图像分类&#xff0c;这是计算机视觉中的一个基础任务。 计算机…

什么是幂等

什么是幂等&#xff1f; 幂等简单来说就是“重复做同一件事&#xff0c;结果还是一样的”。比如&#xff0c;你按电视遥控器的开关按钮&#xff0c;按一次电视开了&#xff0c;再按一次电视关了。这个操作不是幂等的&#xff0c;因为你每按一次&#xff0c;结果都不一样。 再…

KTM580030bit 绝对角度细分器支持最多 4096 对极与一键非线性自校准集成双 16bit 2M SAR ADC

KTM5800 是一款 30bit 绝对角度细分 4096 对极编码细分器&#xff0c;可以与磁电阻传感器&#xff08; AM R/TMR &#xff09;搭配&#xff0c;构成一个高速高精度的非接触磁性编码器模块。它具有以非常高的采样速率 读取传感器上的差分模拟正弦和余弦信号的能力&#xf…

pytest 生成allure测试报告

allure的安装 github地址 allure资产列表 windows下载.zip&#xff0c;解压并配置环境变量PATH&#xff1b;linux下载安装allure&#xff0c;可以使用windows下解压的.zip文件&#xff08;通用&#xff09;&#xff0c;或者下载.rpm/.deb 文件进行安装并配置PATH&#xff1b;…

通信工程学习:什么是MRF多媒体资源功能、MRFC多媒体资源功能控制、MRFP多媒体资源功能处理

一、MRF多媒体资源功能 MRF&#xff08;Multimedia Resource Function&#xff0c;多媒体资源功能&#xff09;是3G/IMS网络中定义的提供多媒体资源功能的网络实体&#xff0c;它为3G/IMS网络的业务和承载提供媒体能力支持。MRF通过提供丰富的媒体处理功能&#xff0c;如播放声…

分块总结:时髦之裤

说白了就是南外分块题做的差不多了&#xff0c;来写一篇总结。 简要题意&#xff1a; 给一序列 a&#xff0c;初始时 a i i a_ii ai​i&#xff0c;有如下两个操作&#xff1a; 1.将[l,r]每个数改为x&#xff0c;该点增加贡献 ∣ a i − x ∣ |a_i-x| ∣ai​−x∣. 2.询问[l…

SQLite的入门级项目学习记录(二)

再补充一些基础知识&#xff1a; 并行操作的问题 1、可以多游标同时运行 SQLite&#xff0c;对于同一个连接sqlite3.connect(db_file)&#xff0c;可以同时创建多个游标&#xff0c;每个游标都是独立的&#xff0c;可以执行各自的SQL命令序列。 import sqlite3# 创建数据库连…