java使用BZip算法压缩解压缩文件、数据流、byte[]字节数组
全栈工程师开发手册 (作者:栾鹏)
java教程全解
java使用BZip算法压缩解压缩文件、数据流、byte[]字节数组
需要添加org.apache.commons.compress包,下载
测试代码
public static void main(String[] args) {try {String inputStr = "zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org,zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org,zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org,zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org,zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org,zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org,zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org,zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org,zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org,zlex@zlex.org,snowolf@zlex.org,zlex.snowolf@zlex.org"; //测试字节数组byte[] input = inputStr.getBytes(); System.err.println("原文:\t" + inputStr); System.err.println("长度:\t" + input.length); byte[] data = BZip2Utils.compress(input); System.err.println("压缩后:\t"); System.err.println("长度:\t" + data.length); byte[] output = BZip2Utils.decompress(data); String outputStr = new String(output); System.err.println("解压缩后:\t" + outputStr); System.err.println("长度:\t" + output.length); //测试文件FileOutputStream fos = new FileOutputStream("test.txt"); fos.write(inputStr.getBytes()); fos.flush(); fos.close(); BZip2Utils.compress("test.txt"); BZip2Utils.decompress("test.txt.bz2"); File file = new File("test.txt"); FileInputStream fis = new FileInputStream(file); DataInputStream dis = new DataInputStream(fis); byte[] data1 = new byte[(int) file.length()]; dis.readFully(data1); fis.close(); outputStr = new String(data1); } catch (Exception e) {e.printStackTrace();}}
BZip压缩解压缩工具类的实现
package com.lp.app.io;import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream;//BZip2工具
public class BZip2Utils { //数据压缩 public static byte[] compress(byte[] data) throws Exception { ByteArrayInputStream bais = new ByteArrayInputStream(data); ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 压缩 compress(bais, baos); byte[] output = baos.toByteArray(); baos.flush(); baos.close(); bais.close(); return output; } //文件压缩 public static void compress(File file) throws Exception { compress(file, true); } //文件压缩 是否删除原始文件 public static void compress(File file, boolean delete) throws Exception { FileInputStream fis = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(file.getPath() + ".bz2"); compress(fis, fos); fis.close(); fos.flush(); fos.close(); if (delete) { file.delete(); } } //数据压缩 public static void compress(InputStream is, OutputStream os) throws Exception { BZip2CompressorOutputStream gos = new BZip2CompressorOutputStream(os); int count; byte data[] = new byte[1024]; while ((count = is.read(data, 0, 1024)) != -1) { gos.write(data, 0, count); } gos.finish(); gos.flush(); gos.close(); } //文件压缩 public static void compress(String path) throws Exception { compress(path, true); } //文件压缩 是否删除原始文件 public static void compress(String path, boolean delete) throws Exception { File file = new File(path); compress(file, delete); } //数据解压缩 public static byte[] decompress(byte[] data) throws Exception { ByteArrayInputStream bais = new ByteArrayInputStream(data); ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 解压缩 decompress(bais, baos); data = baos.toByteArray(); baos.flush(); baos.close(); bais.close(); return data; } //文件解压缩 public static void decompress(File file) throws Exception { decompress(file, true); } //文件解压缩 是否删除原始文件 public static void decompress(File file, boolean delete) throws Exception { FileInputStream fis = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(file.getPath().replace(".bz2", "")); decompress(fis, fos); fis.close(); fos.flush(); fos.close(); if (delete) { file.delete(); } } //数据解压缩 public static void decompress(InputStream is, OutputStream os) throws Exception { BZip2CompressorInputStream gis = new BZip2CompressorInputStream(is); int count; byte data[] = new byte[1024]; while ((count = gis.read(data, 0, 1024)) != -1) { os.write(data, 0, count); } gis.close(); } //文件解压缩 默认删除源文件public static void decompress(String path) throws Exception { decompress(path, true); } //文件解压缩 是否删除原始文件 public static void decompress(String path, boolean delete) throws Exception { File file = new File(path); decompress(file, delete); } }
java使用BZip算法压缩解压缩文件、数据流、byte[]字节数组相关推荐
- java使用tar算法压缩解压缩文件、数据流、byte[]字节数组
全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用tar算法压缩解压缩文件.数据流.byte[]字节数组 需要添加org.apache.commons.compress包,下载 测试代 ...
- java实现zlib压缩解压缩:文件、byte[]字节数组,数据流
全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现zlib压缩解压缩. 有关ZLib可参见官方主页 http://www.zlib.net/ ZLib可以简单的理解为压缩/解压缩算法, ...
- java Hutool发送邮件附带附件 使用文件流、字节数组方式
MailUtil.send();无法发送文件流, //这个方式只能传入本地File,无法传入网络资源 MailUtil.send(); 内置Mail类实现方式 public static void m ...
- 将图片文件通过byte[]字节数组Base64加密后给前端显示
问题描述:把图片上传到服务器,拿到url地址后把url地址给前端,该url地址可以直接获取到图片文件的字节数组进行base64加密后的字符串(data) 解决方法: //将图片转化为字节数组 byte ...
- Java 原生实现 URL Decode 功能(从 Byte 字节数组转 Unicode 字符)
Java 实现 URL Decode 背景: ElasticSearch 自定义脚本 Painless 当中可以支持 Java 的部分 API,但 6.x 版本没有对 URLDecode 的支持(发现 ...
- Unity录音并保存成wav文件或者byte[]字节数组
需要去商店下载[Open WAV Parser]这个插件,目前是免费的! ps. 用这个插件之前,用Unity原生的Microphone折腾了快两天.最终觉得还是这个插件好用啊!推荐!
- java实现linux中gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩
全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现gzip压缩解压缩byte[]字节数组,文件,字符串. 测试代码 public static void main(String[] a ...
- c#实现linux中gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩
全栈工程师开发手册 (作者:栾鹏) c#教程全解 c#实现gzip压缩解压缩byte[]字节数组,文件,字符串. 测试代码 static void Main() {//测试字符串String inpu ...
- Java中压缩/解压缩文件有什么好的解决方案呢?
转入: Java中压缩/解压缩文件有什么好的解决方案呢? 下文笔者将讲述java中压缩/解压缩文件的处理方法分享,如下所示: 我们都知道,在java中JDK的Apache默认带有Zip库 但是它太大, ...
最新文章
- oracle创建简单的包
- CTO:再写if-else,逮着一个罚款1000!
- 使用工厂模式解决设计问题
- mysql7.5安装教程_CentOS7.5下yum安装MySQL8图文教程
- java需要会的工具_Java开发者必备的几款工具,一定要掌握!
- 两数之和-给定一个整数数组nums和一个目标值target,请你在该数组找出和为目标值的那两个整数,并返回他们的数组下标,你可以假设每种输入只会对应一个答案。但是,数组同一个元素不能使-python
- day10-包的定义和内部类
- 20155322 《Java程序设计》课堂实践项目 数据库-3-4
- 杭州29岁IT男凌晨突发脑出血!老父亲面对医生急的差点跪下
- mysql text 性能_MySQL - text 性能优化--记录一
- Aqua data studio 19 汉化方法
- 南佛罗里达大学计算机科学硕士,南佛罗里达大学计算机科学理学硕士研究生申请要求及申请材料要求清单...
- Can't open /dev/sdb1 exclusively. Mounted files
- 2019百日打卡DAY12
- 计算机如何重新连接打印机,电脑重装系统后怎么连接打印机
- 优维低代码:Pipes 管道
- SPA项目开发之登录注册
- 基于微信失物招领小程序系统设计与实现 开题报告
- 【iOS】代码开发中bug管理:bugHD和bugtags
- php毕业设计 基于php+mysql旅游景区景点购票系统毕业设计开题报告功能参考