第一百六十七节 Java IO教程 - Java Zip字节数组

Java IO教程 - Java Zip字节数组

校验和

Java在java.util.zip包中提供了一个Adler32类来计算数据字节的Adler-32校验和。

我们需要调用这个类的update()方法将字节传递给它。

在同一个包中还有另一个名为CRC32的类,它允许您使用CRC32算法计算校验和。

以下代码说明如何使用Adler32和CRC32类来计算校验和。

import java.util.zip.Adler32;
import java.util.zip.CRC32;public class Main {public static void main(String[] args) throws Exception {String str = "HELLO";byte[] data = str.getBytes("UTF-8");System.out.println("Adler32 and  CRC32  checksums  for " + str);// Compute Adler32 checksumAdler32 ad = new Adler32();ad.update(data);long adler32Checksum = ad.getValue();System.out.println("Adler32: " + adler32Checksum);// Compute CRC32 checksumCRC32 crc = new CRC32();crc.update(data);long crc32Checksum = crc.getValue();System.out.println("CRC32: " + crc32Checksum);}
}

上面的代码生成以下结果。

压缩字节数组

我们可以使用java.util.zip包中的Deflater和Inflater类来分别压缩和解压缩字节数组中的数据。

我们可以使用Deflater类中的一个常量来指定压缩级别。

这些常数是BEST_COMPRESSION,BEST_ SPEED,DEFAULT_COMPRESSION和NO_COMPRESSION。

最佳速度意味着较低的压缩比,最好的压缩意味着较慢的压缩速度。

Deflater  compressor = new Deflater(Deflater.BEST_COMPRESSION);

默认情况下,压缩数据使用Deflater对象将以ZLIB格式。

要以GZIP或PKZIP格式压缩数据,请通过在构造函数中使用布尔标志为true来指定。

// Uses  the   best speed  compression and  GZIP format
Deflater  compressor = new Deflater(Deflater.BEST_SPEED, true);

以下代码显示如何使用Deflater和Inflater类压缩和解压缩字节数组

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.DataFormatException;
import java.util.zip.Deflater;
import java.util.zip.Inflater;public class Main {public static void main(String[] args) throws Exception {String input = "Hello world!";byte[] uncompressedData = input.getBytes("UTF-8");byte[] compressedData = compress(uncompressedData,Deflater.BEST_COMPRESSION, false);byte[] decompressedData = decompress(compressedData, false);String output = new String(decompressedData, "UTF-8");System.out.println("Uncompressed data length: " + uncompressedData.length);System.out.println("Compressed data length:  " + compressedData.length);System.out.println("Decompressed data length:  " + decompressedData.length);}public static byte[] compress(byte[] input, int compressionLevel,boolean GZIPFormat) throws IOException {Deflater compressor = new Deflater(compressionLevel, GZIPFormat);compressor.setInput(input);compressor.finish();ByteArrayOutputStream bao = new ByteArrayOutputStream();byte[] readBuffer = new byte[1024];int readCount = 0;while (!compressor.finished()) {readCount = compressor.deflate(readBuffer);if (readCount > 0) {bao.write(readBuffer, 0, readCount);}}compressor.end();return bao.toByteArray();}public static byte[] decompress(byte[] input, boolean GZIPFormat)throws IOException, DataFormatException {Inflater decompressor = new Inflater(GZIPFormat);decompressor.setInput(input);ByteArrayOutputStream bao = new ByteArrayOutputStream();byte[] readBuffer = new byte[1024];int readCount = 0;while (!decompressor.finished()) {readCount = decompressor.inflate(readBuffer);if (readCount > 0) {bao.write(readBuffer, 0, readCount);}}decompressor.end();return bao.toByteArray();}
}

上面的代码生成以下结果。


 

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

使用geoipupdate自动更新GeoIP数据库

一、 什么是 GeoIP? 通过在数据库中将地理位置和 IP 地址相互映射,软件程序便可以使用 IP 地址来确定其对应的地理位置,其中包括国家/地区、州/省、城市、邮政编码、纬度/经度、ISP、区号和其他信息。 很多软件都使用 MaxMind 的数据库对 IP…

选择Maya进行3D动画制作与渲染的理由

如果你对3D动画充满热情并追求成为专业3D动画师的梦想,你一定听说过Maya——近年来3D动画的行业标准。Maya被3D艺术家广泛使用,你是否想知道为什么Maya总是他们的首选?下面一起来了解下。 一、什么是Maya? 由Autodesk开发的Maya是…

昇思25天学习打卡营第24天|基于MindSpore的Diffusion扩散模型

Diffusion扩散模型 本文基于Hugging Face:The Annotated Diffusion Model一文翻译迁移而来,同时参考了由浅入深了解Diffusion Model一文。 关于扩散模型(Diffusion Models)有很多种理解,本文的介绍是基于denoising di…

浅谈Git

一:什么是 git git一种开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 下图是 git 的一个工作流程简图 二:什么是 分布/集中式版本控制系统 软件开发过程中,要解决多人协作的问题,需要…

FPGA CFGBVS 管脚接法

说明 新设计了1个KU040 FPGA板子,回来之后接上JTAG FPGA不识别。做如下检查: 1、电源测试点均正常; 2、查看贴片是否有漏焊,检查无异常,设计上NC的才NC; 3、反复检查JTAG接线是否异常,贴片是…

PostgreSQL 的 generic xlog 模块代码解读

为了描述方便,定义一些名词: wal/WAL -- Write Ahead Log,指PG中事务日志模块,这里所指的其实比较模糊,相关的函数,内存都算,自定义WAL就是指,用户可以决定自己存储在shared buffer …

数据库的约束条件和用户管理

约束条件: 主键:主键约束 primary key 用于标识表中的主键列的值,而且这个值是全表当中唯一的,而且只不能为null 一个表只能有一个主键。 外键:用来建立表与表之间的关系。确保外键中的值于另一个表的主键值匹配&a…

实验七:图像的复原处理

一、实验目的 熟悉常见的噪声及其概率密度函数。熟悉在实际应用中比较重要的图像复原技术,会对退化图像进行复原处理。二、实验原理 1. 图像复原技术,说简单点,同图像增强那样,是为了以某种预定义的方式来改进图像。在具体操作过程中用流程图表示,其过程就如下面所示: 2…

源代码加密需求中零信任沙箱如何成为企业底牌?

随着计算机和网络技术的普及发展,公司和企业的办公方式和业务流发生了翻天覆地的变化。 全世界有60%的人主要从事与信息的生成、加工和存储以及相关技术的服务性工作。大量数据信息的创建、存储、传输以及共享方式已经发生了革命性的变化,主要表现在以下…

allure_pytest:AttributeError: ‘str‘ object has no attribute ‘iter_parents‘

踩坑记录 问题描述: 接口自动化测试时出现报错,报错文件是allure_pytest库 问题分析: 自动化测试框架是比较成熟的代码,报错也不是自己写的文件,而是第三方库,首先推测是allure_pytest和某些库有版本不兼…

一五六、Node+Vue 使用七牛上传图片,并配置个人域名

1. 七牛云ak/sk获取 点击注册🔗开通七牛开发者帐号如果已有账号,直接登录七牛开发者后台,点击这里🔗查看 Access Key 和 Secret Key 2. Node.js获取七牛token 安装qiniu npm install qiniu创建空间 Node获取token const qi…

数据采集监控平台:挖掘数据价值 高效高速生产!

在当今数字化的时代,数据已成为企业非常宝贵的资产之一。然而,要充分发挥数据的潜力,离不开一个强大的数据采集监控平台,尤其是生产制造行业。它不仅是数据的收集者,更是洞察生产的智慧之眼,高效高速处理产…

第一章 应急响应- Linux入侵排查

简介 账号:root 密码:linuxruqin ssh rootIP 1.web目录存在木马,请找到木马的密码提交 2.服务器疑似存在不死马,请找到不死马的密码提交 3.不死马是通过哪个文件生成的,请提交文件名 4.黑客留下了木马文件&#xff0c…

使用 Flask 3 搭建问答平台(一):项目结构搭建

一、项目基本结构 二、app.py from flask import Flask import config from exts import db from models import UserModel from blueprints.qa import bp as qa_bp from blueprints.auth import bp as auth_bp# 创建一个Flask应用实例,__name__参数帮助Flask确定应…

聊一聊前后端权限控制 RBAC(完整流程)

介绍 RBAC(Role-Based Access Control)模型也就是基于角色的权限控制。 权限会分配到角色中,角色再分配给用户,这样用户就根据角色有了不同的权限。 当然,你可以说把权限直接挂载到用户上,这样不是更直接…

专业软件测评机构揭秘:移动app安全测试要点和注意事项

随着移动应用的普及和用户对信息安全的重视,任何一个缺乏安全性保障的应用程序都可能会被用户所抛弃。只有通过全面的安全测试,才能保证应用程序的安全性,增加用户的粘性和忠诚度,移动app安全测试是指对移动应用程序进行安全性评估…

【D3.js in Action 3 精译_015】1.3 D3 视角下的数据可视化最佳实践(下)

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介 ✔️ 1.1 何为 D3.js?1.2 D3 生态系统——入门须知 1.2.1 HTML 与 DOM1.2.2 SVG - 可缩放矢量图形1.2.3 Canvas 与 WebGL1.2.4 CSS1.2.5 JavaScript1.2.6 Node 与 JavaScript 框架1.2.7 Observable 记事…

百川智能,摘下“大模型皇冠上的明珠”?

随着AI产业化和产业AI化成为业界共识,大模型的“新赛季”来了。 2024年是国产大模型全面商业化的元年,各地人工智能产业发展的政策密集出台。同时,在2024世界人工智能大会(WAIC 2024)上,各大AI厂商纷纷表示…

【Linux】基础I/O——FILE,用户缓冲区

1.FILE里的fd FILE是C语言定义的文件结构体,里面包含了各种文件信息。可以肯定的一点是,FILE结构体内一定封装了 fd 。为什么?来看接下来的思路分析: 1.使用系统接口的必然性   文件存储在磁盘上,属于外设。谁有权限访问…

【AI绘画教程】Stable Diffusion 1.5 vs 2

在本文中,我们将总结稳定扩散 1 与稳定扩散 2 辩论中的所有要点。我们将在第一部分中查看这些差异存在的实际原因,但如果您想直接了解实际差异,您可以跳下否定提示部分。让我们开始吧! Stable Diffusion 2.1 发布与1.5相比,2.1旨在解决2.0的许多相对缺点。本文的内容与理解…