Java压缩字符串的方法收集
说明:
1、一般来说要实现压缩,那么返回方式一般是用byte[]数组。
2、研究发现byte[]数组在转成可读的String时,大小会还原回原来的。
3、如果采用压缩之后不可读的String时,互相转换大小会变小,唯一缺点就是转出的String不可读,需要再次解码之后才可读。
4、对于压缩一般最近常听的应该就是gzip这些。
实现一:
- /***
- * 压缩GZip
- *
- * @param data
- * @return
- */
- public static byte[] gZip(byte[] data) {
- byte[] b = null;
- try {
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- GZIPOutputStream gzip = new GZIPOutputStream(bos);
- gzip.write(data);
- gzip.finish();
- gzip.close();
- b = bos.toByteArray();
- bos.close();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- return b;
- }
- /***
- * 解压GZip
- *
- * @param data
- * @return
- */
- public static byte[] unGZip(byte[] data) {
- byte[] b = null;
- try {
- ByteArrayInputStream bis = new ByteArrayInputStream(data);
- GZIPInputStream gzip = new GZIPInputStream(bis);
- byte[] buf = new byte[1024];
- int num = -1;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- while ((num = gzip.read(buf, 0, buf.length)) != -1) {
- baos.write(buf, 0, num);
- }
- b = baos.toByteArray();
- baos.flush();
- baos.close();
- gzip.close();
- bis.close();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- return b;
- }
- /***
- * 压缩Zip
- *
- * @param data
- * @return
- */
- public static byte[] zip(byte[] data) {
- byte[] b = null;
- try {
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- ZipOutputStream zip = new ZipOutputStream(bos);
- ZipEntry entry = new ZipEntry("zip");
- entry.setSize(data.length);
- zip.putNextEntry(entry);
- zip.write(data);
- zip.closeEntry();
- zip.close();
- b = bos.toByteArray();
- bos.close();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- return b;
- }
- /***
- * 解压Zip
- *
- * @param data
- * @return
- */
- public static byte[] unZip(byte[] data) {
- byte[] b = null;
- try {
- ByteArrayInputStream bis = new ByteArrayInputStream(data);
- ZipInputStream zip = new ZipInputStream(bis);
- while (zip.getNextEntry() != null) {
- byte[] buf = new byte[1024];
- int num = -1;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- while ((num = zip.read(buf, 0, buf.length)) != -1) {
- baos.write(buf, 0, num);
- }
- b = baos.toByteArray();
- baos.flush();
- baos.close();
- }
- zip.close();
- bis.close();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- return b;
- }
- /***
- * 压缩BZip2
- *
- * @param data
- * @return
- */
- public static byte[] bZip2(byte[] data) {
- byte[] b = null;
- try {
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- CBZip2OutputStream bzip2 = new CBZip2OutputStream(bos);
- bzip2.write(data);
- bzip2.flush();
- bzip2.close();
- b = bos.toByteArray();
- bos.close();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- return b;
- }
- /***
- * 解压BZip2
- *
- * @param data
- * @return
- */
- public static byte[] unBZip2(byte[] data) {
- byte[] b = null;
- try {
- ByteArrayInputStream bis = new ByteArrayInputStream(data);
- CBZip2InputStream bzip2 = new CBZip2InputStream(bis);
- byte[] buf = new byte[1024];
- int num = -1;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- while ((num = bzip2.read(buf, 0, buf.length)) != -1) {
- baos.write(buf, 0, num);
- }
- b = baos.toByteArray();
- baos.flush();
- baos.close();
- bzip2.close();
- bis.close();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- return b;
- }
- /**
- * 把字节数组转换成16进制字符串
- *
- * @param bArray
- * @return
- */
- public static String bytesToHexString(byte[] bArray) {
- StringBuffer sb = new StringBuffer(bArray.length);
- String sTemp;
- for (int i = 0; i < bArray.length; i++) {
- sTemp = Integer.toHexString(0xFF & bArray[i]);
- if (sTemp.length() < 2)
- sb.append(0);
- sb.append(sTemp.toUpperCase());
- }
- return sb.toString();
- }
- /**
- *jzlib 压缩数据
- *
- * @param object
- * @return
- * @throws IOException
- */
- public static byte[] jzlib(byte[] object) {
- byte[] data = null;
- try {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- ZOutputStream zOut = new ZOutputStream(out,
- JZlib.Z_DEFAULT_COMPRESSION);
- DataOutputStream objOut = new DataOutputStream(zOut);
- objOut.write(object);
- objOut.flush();
- zOut.close();
- data = out.toByteArray();
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return data;
- }
- /**
- *jzLib压缩的数据
- *
- * @param object
- * @return
- * @throws IOException
- */
- public static byte[] unjzlib(byte[] object) {
- byte[] data = null;
- try {
- ByteArrayInputStream in = new ByteArrayInputStream(object);
- ZInputStream zIn = new ZInputStream(in);
- byte[] buf = new byte[1024];
- int num = -1;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- while ((num = zIn.read(buf, 0, buf.length)) != -1) {
- baos.write(buf, 0, num);
- }
- data = baos.toByteArray();
- baos.flush();
- baos.close();
- zIn.close();
- in.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return data;
- }
- public static void main(String[] args) {
- String s = "this is a test";
- byte[] b1 = zip(s.getBytes());
- System.out.println("zip:" + bytesToHexString(b1));
- byte[] b2 = unZip(b1);
- System.out.println("unZip:" + new String(b2));
- byte[] b3 = bZip2(s.getBytes());
- System.out.println("bZip2:" + bytesToHexString(b3));
- byte[] b4 = unBZip2(b3);
- System.out.println("unBZip2:" + new String(b4));
- byte[] b5 = gZip(s.getBytes());
- System.out.println("bZip2:" + bytesToHexString(b5));
- byte[] b6 = unGZip(b5);
- System.out.println("unBZip2:" + new String(b6));
- byte[] b7 = jzlib(s.getBytes());
- System.out.println("jzlib:" + bytesToHexString(b7));
- byte[] b8 = unjzlib(b7);
- System.out.println("unjzlib:" + new String(b8));
- }
- }
实现二:
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.util.zip.GZIPInputStream;
- import java.util.zip.GZIPOutputStream;
- // 将一个字符串按照zip方式压缩和解压缩
- public class ZipUtil {
- // 压缩
- public static String compress(String str) throws IOException {
- if (str == null || str.length() == 0) {
- return str;
- }
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- GZIPOutputStream gzip = new GZIPOutputStream(out);
- gzip.write(str.getBytes());
- gzip.close();
- return out.toString("ISO-8859-1");
- }
- // 解压缩
- public static String uncompress(String str) throws IOException {
- if (str == null || str.length() == 0) {
- return str;
- }
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- ByteArrayInputStream in = new ByteArrayInputStream(str
- .getBytes("ISO-8859-1"));
- GZIPInputStream gunzip = new GZIPInputStream(in);
- byte[] buffer = new byte[256];
- int n;
- while ((n = gunzip.read(buffer)) >= 0) {
- out.write(buffer, 0, n);
- }
- // toString()使用平台默认编码,也可以显式的指定如toString("GBK")
- return out.toString();
- }
- // 测试方法
- public static void main(String[] args) throws IOException {
- System.out.println(ZipUtil.uncompress(ZipUtil.compress("中国China")));
- }
- }
实现三:
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipInputStream;
- import java.util.zip.ZipOutputStream;
- public class StringCompress {
- public static final byte[] compress(String paramString) {
- if (paramString == null)
- return null;
- ByteArrayOutputStream byteArrayOutputStream = null;
- ZipOutputStream zipOutputStream = null;
- byte[] arrayOfByte;
- try {
- byteArrayOutputStream = new ByteArrayOutputStream();
- zipOutputStream = new ZipOutputStream(byteArrayOutputStream);
- zipOutputStream.putNextEntry(new ZipEntry("0"));
- zipOutputStream.write(paramString.getBytes());
- zipOutputStream.closeEntry();
- arrayOfByte = byteArrayOutputStream.toByteArray();
- } catch (IOException localIOException5) {
- arrayOfByte = null;
- } finally {
- if (zipOutputStream != null)
- try {
- zipOutputStream.close();
- } catch (IOException localIOException6) {
- }
- if (byteArrayOutputStream != null)
- try {
- byteArrayOutputStream.close();
- } catch (IOException localIOException7) {
- }
- }
- return arrayOfByte;
- }
- @SuppressWarnings("unused")
- public static final String decompress(byte[] paramArrayOfByte) {
- if (paramArrayOfByte == null)
- return null;
- ByteArrayOutputStream byteArrayOutputStream = null;
- ByteArrayInputStream byteArrayInputStream = null;
- ZipInputStream zipInputStream = null;
- String str;
- try {
- byteArrayOutputStream = new ByteArrayOutputStream();
- byteArrayInputStream = new ByteArrayInputStream(paramArrayOfByte);
- zipInputStream = new ZipInputStream(byteArrayInputStream);
- ZipEntry localZipEntry = zipInputStream.getNextEntry();
- byte[] arrayOfByte = new byte[1024];
- int i = -1;
- while ((i = zipInputStream.read(arrayOfByte)) != -1)
- byteArrayOutputStream.write(arrayOfByte, 0, i);
- str = byteArrayOutputStream.toString();
- } catch (IOException localIOException7) {
- str = null;
- } finally {
- if (zipInputStream != null)
- try {
- zipInputStream.close();
- } catch (IOException localIOException8) {
- }
- if (byteArrayInputStream != null)
- try {
- byteArrayInputStream.close();
- } catch (IOException localIOException9) {
- }
- if (byteArrayOutputStream != null)
- try {
- byteArrayOutputStream.close();
- } catch (IOException localIOException10) {
- }
- }
- return str;
- }
- }
参考:
https://www.cnblogs.com/dongzhongwei/p/5964758.html(以上内容部分转自此篇文章)
http://www.blogjava.net/fastunit/archive/2008/04/25/195932.html(以上内容部分转自此篇文章)
http://blog.csdn.net/xyw591238/article/details/51720016(以上内容部分转自此篇文章)
Java压缩字符串的方法收集的更多相关文章
- Java里字符串split方法
Java中的split方法以"."切割字符串时,需要转义 String str[] = s.split("\\.");
- Java压缩字符串工具类
StringCompressUtils.java package javax.utils; import java.io.ByteArrayInputStream; import java.io.By ...
- Java 压缩字符串
1.引言 最近在做项目中,平台提供一个http服务给其他系统调用,然后我接收到其他系统的json格式的报文后去解析,然后用拿到的数据去调用corba服务,我再把corba的返回值封装完成json字符串 ...
- [Java] - 格式字符串替换方法
Java 字符串格式替换方法有两种,一种是使用String.format(...),另一种是使用MessageFormat.format(...) 如下: import java.text.Messa ...
- Java中字符串替换方法
replaceAll方法 public String replaceAll(String regex, String replacement) replace方法 public String repl ...
- 案例1:写一个压缩字符串的方法,例如aaaabbcxxx,则输出a4b2c1x3。
public static String zipString(String str){ String result = "";//用于拼接新串的变量 char last = str ...
- JavaScript字符串分割方法
使用split('')方法.此方法与Java的字符串分割方法方法名一样.
- Java实现字符串反转的8种方法
/** * */ package com.wsheng.aggregator.algorithm.string; import java.util.Stack; /** * 8 种字符串反转的方法, ...
- paip.截取字符串byLastDot方法总结uapi python java php c# 总结
paip.截取字符串byLastDot方法总结uapi python java php c# 总结 ========uapi left_byLastDot right_byLastDot 目前 ...
随机推荐
- webpack 引入 html-webpack-plugin 报错
配置webpack当中,出现一个问题: 引入html-webpack-plugin 插件报错. 这时需要本地(也就是当前项目下)安装一下webpack就可以解决问题了. 注意:现在是webpack4版 ...
- Rem与em的简单理解
Rem与em的简单理解 Em单位与像素px的转换 所得的像素值 = 当前元素的font-size * em的值 比如:div的font-size:12px 10em等同于120px 12*10 =12 ...
- 数学:乘法逆元-拓展GCD
乘法逆元应用在组合数学取模问题中,这里给出的实现不见得好用 给出拓展GCD算法: 扩展欧几里得算法是指对于两个数a,b 一定能找到x,y(均为整数,但不满足一定是正数) 满足x*a+y*b=gcd(a ...
- 汕头市队赛 SRM 07 B 好玩的麻将
B 好玩的麻将 SRM 07 背景&&描述 天才麻将少女KPM立志要在日麻界闯出一番名堂. KPM上周又打了n场麻将,又控了分使得自己的排名是1..n的一个排列. 但她 ...
- CDQ 学习笔记
CDQ分治 CDQ(陈丹琦)分治是一种特殊的分治方法. 它只能处理非强制在线的问题. CDQ分治在维护一些动态的凸包.半平面交问题也有一定应用,然而本渣渣并不会. CDQ分治基于时间分治,整体二分基于 ...
- 使用腾讯云 GPU 学习深度学习系列之二:Tensorflow 简明原理【转】
转自:https://www.qcloud.com/community/article/598765?fromSource=gwzcw.117333.117333.117333 这是<使用腾讯云 ...
- appium===Python+Appium环境部署教程
*前提是你已经安装好python,以及python的pip工具 *安装python请自行百度教程~ 1.安装安卓sdk 安装包:http://tools.android-studio.org/inde ...
- JS 判断某变量是否为某数组中的一个值 的几种方法
1.正则表达式 js 中判断某个元素是否存在于某个 js 数组中,相当于 PHP 语言中的 in_array 函数. }; 用法如下: var arr=new Array([‘b’,2,‘a‘,4]) ...
- IE6 下的HTML5兼容问题
下面列举IE6中10个不得不注意的问题: 1. 使用 DOCTYPE你需要在HTML页面的最顶部加上DOCTYPE类型,当然, strict版是值得推荐的,例如: <!DOCTYPE HTML ...
- AngularJS 入门教程
1. 简介:AngularJS是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了.所以我做了一些工作(你也可以觉得是 ...