`

java String 解压、压缩

 
阅读更多
package jp.biziq.sxf.zip;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import org.apache.commons.codec.binary.Base64;


public class ZipCompress {
public static void main(String[] args) {
// File file = new File("d:\\search_user_max_create_zip.xml");
// File file = new File("d:\\abc\\search_user_max.xml");
File file = new File("d:\\abc\\offer_max.xml");

try {
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
StringBuffer sb = new StringBuffer("");
String str = null;
while((str = bfr.readLine()) != null) {
sb.append(str);
sb.append("\r\n");
}
bfr.close();
fr.close();
// System.out.println(sb.toString());
long startTime = System.currentTimeMillis();
String result = ZipCompress.compress(sb.toString());
System.out.println("压缩耗时:" + (System.currentTimeMillis() - startTime) + "ms");
startTime = System.currentTimeMillis();
String deCompress = ZipCompress.decompress(result);
System.out.println("解压缩耗时:" + (System.currentTimeMillis() - startTime) + "ms");
// OutputStream os = new FileOutputStream("d:\\compress_users_string.xml");
// os.write(result.getBytes(), 0, result.getBytes().length);
// System.out.println(deCompress);
FileWriter fw = new FileWriter("d:\\compress_users_string_fw.xml");
fw.write(result);
// os.close();
fw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}


/*String str = "奥术法术的方式地方史蒂夫23423sss222xxx || 奥术法术的方式地方史蒂夫23423sss222xxx";

String compress = ZipCompress.compress(str);
System.out.println(compress);
System.out.println(ZipCompress.decompress(compress));*/

/*String str1 = "是的防守打法xxxs234234";
String str2 = "test蛤蟆??";
byte[] compress1 = ZipCompress.compress(str1);
byte[] compress2 = ZipCompress.compress(str2);
// for(byte b : compress1) {
// System.out.print((char)b);
// }
// System.out.println();
// for(byte b : compress2) {
// System.out.print((char)b);
// }
System.out.println("compress1: " + compress1);
System.out.println("解压compress1:" + ZipCompress.decompress(compress1));
System.out.println("解压compress2:" + ZipCompress.decompress(compress2));

byte[] sum = new byte[compress1.length + compress2.length];
System.arraycopy(compress1, 0, sum, 0, compress1.length);
System.arraycopy(compress2, 0, sum, compress1.length, compress2.length);
for(byte b : sum) {
System.out.print((char)b);
}
System.out.println();
System.out.println("解压:" + ZipCompress.decompress(sum));*/

/*File file = new File("d:\\search_user_max_create_zip.xml");
try {
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
StringBuffer sb = new StringBuffer("");
String str = null;
while((str = bfr.readLine()) != null) {
sb.append(str);
sb.append("\r\n");
}
bfr.close();
fr.close();
// System.out.println(sb.toString());
long startTime = System.currentTimeMillis();
byte[] result = ZipCompress.compress(sb.toString());
System.out.println("压缩耗时:" + (System.currentTimeMillis() - startTime) + "ms");
startTime = System.currentTimeMillis();
ZipCompress.decompress(result);
System.out.println("解压缩耗时:" + (System.currentTimeMillis() - startTime) + "ms");
OutputStream os = new FileOutputStream("d:\\compress_users.xml");
os.write(result, 0, result.length);
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}*/
}

/**
* 压缩字符串为 byte[]
* 储存可以使用new sun.misc.BASE64Encoder().encodeBuffer(byte[] b)方法
* 保存为字符串
*
* @param str 压缩前的文本
* @return
*/
public static final String compress(String str) {
if(str == null) {
return null;
}

byte[] compressed;
ByteArrayOutputStream out = null;
ZipOutputStream zout = null;

try {
out = new ByteArrayOutputStream();
zout = new ZipOutputStream(out);
zout.putNextEntry(new ZipEntry("0"));
zout.write(str.getBytes());
zout.closeEntry();
compressed = out.toByteArray();
} catch(IOException e) {
e.printStackTrace();
compressed = null;
} finally {
if(zout != null) {
try{zout.close();} catch(IOException e){}
}
if(out != null) {
try{out.close();} catch(IOException e){}
}
}

if(compressed != null) {
return Base64.encodeBase64String(compressed);
}

return null;
}

/**
* 将压缩后的 byte[] 数据解压缩
*
* @param compressed 压缩后的 byte[] 数据
* @return 解压后的字符串
*/
public static final String decompress(String str) {
byte[] compressed = Base64.decodeBase64(str);
if(compressed == null) {
return null;
}

ByteArrayOutputStream out = null;
ByteArrayInputStream in = null;
ZipInputStream zin = null;
String decompressed;
try {
out = new ByteArrayOutputStream();
in = new ByteArrayInputStream(compressed);
zin = new ZipInputStream(in);
ZipEntry entry = zin.getNextEntry();
byte[] buffer = new byte[1024];
int offset = -1;
while((offset = zin.read(buffer)) != -1) {
out.write(buffer, 0, offset);
}
decompressed = out.toString();
} catch (IOException e) {
e.printStackTrace();
decompressed = null;
} finally {
if(zin != null) {
try {zin.close();} catch(IOException e) {}
}
if(in != null) {
try {in.close();} catch(IOException e) {}
}
if(out != null) {
try {out.close();} catch(IOException e) {}
}
}

return decompressed;
}
}
分享到:
评论

相关推荐

    java zip解压中文乱码问题

    网上很多描述java解压中文乱码的问题,很多描述不全.由于工作需要整理出一个完整版.简单实用.下载后请从ZipUtil.java的main方法开始,一目了然. public static void main(String args[]) { new ZipUtil().unZip("E:\\...

    java算法,实现压缩及解压缩

    Java实现压缩与解压缩ZIP  import java.io.BufferedInputStream;  import java.io.BufferedOutputStream;  import java.io.File;  import java.io.FileInputStream;  import java.io.FileOutputStream;...

    LZ78算法实现对任意字符串的压缩与解压

    运行程序之后输入任意的字符串,将字符串转化成二进制数字字符串,然后利用LZ78算法实现对二进制字符串压缩解压,最后再恢复原来的字符串

    Java实现文件的压缩和解压

    基于GUI用IO流中的ZipOutputStream ,ZipInputStream实现文件的解压与压缩, 如文件解压函数如下 private void unZip(String zipFileName, String outputDirectory)throws Exception { InputStream in=null; ...

    JAVA文件压缩与解压缩实践.doc

    JAVA文件压缩与解压缩实践报告 主函数 gzip压缩模块代码 压缩模块要完成的就是将文件读入以后进行压缩,再将压缩后的数据写入一个新的文件,其部分代码如下: public class gzip { public static void main(String...

    Java/Android 加密解密压缩文件夹

    * @param EncryptZipFile 待解压的加密压缩文件路径 * @param unZipDir 解压文件夹的存储路径 * @param password 解压密码 * @return 成功返回1,失败为0 */ public static int DecryptZipFile(String ...

    lzstring4j:基于LZ的Java压缩算法

    通过这篇通过UTF-16压缩方法(Java Server-> Web上的JS或Node.js服务器上的-> Java Client / Android)与JavaScript库进行互操作。 如何使用 使用lzstring4j非常简单。 但让我们看看: 签出并编译项目: git clone...

    Java GZIP使用的范例压缩解压文件.rar

    Java GZIP使用的范例压缩解压文件,主要是文件流的操作,写入缓冲数据到输出流。  public void zipFile(String source,String target){ //压缩文件  public void unZipFile(String source,String ...

    zip4j_1.3.2 java代码压缩、解压文件

    public static String zip(String src, String dest, boolean isCreateDir, String passwd) { File srcFile = new File(src); ZipParameters parameters = new ZipParameters(); parameters....

    Java哈夫曼编码的文件的压缩与解压.docx

    //根据编码扫描到对应的ASCLL码对应的字符 List<Byte> list = new ... String key = stringBuilder.substring(i, i + count); b = map.get(key); if (b == null) { count++; } else { flag = false; } }

    java源码包---java 源码 大量 实例

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    org.apache.tools.zip解决解压乱码问题

    * @param zipFileName 压缩产生的zip包文件名--带路径,如果为null或空则默认按文件名生产压缩文件名 * @param relativePath 相对路径,默认为空 * @param directory 文件或目录的绝对路径 * void */ ...

    Java操作Ant压缩和解压文件及批量打包Anroid应用

    实现zip/tar的压缩与解压 java中实际是提供了对 zip等压缩格式的支持,但是为什么这里会用到ant呢? 原因主要有两个: 1. java提供的类对于包括有中文字符的路径,文件名支持不够好,你用其它第三方软件解压的时候...

    java源码包4

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包3

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java压缩使用org.apache.tools.zip包解决中文文件名

    使用我自己包,直接放到WEB-INF\classes下解压即可, 在程序中加上 outf.setEncoding("gbk");即可 下面是我的多个文件压缩成一个的压缩,参考 String zipf="D:\\xxx\\xx\\xxb\\xx\\xz.zip"; //---------修改路径---...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包2

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    利用ant api做的遍历并解压各种压缩文件格式的源代码

    利用ant api做的遍历并解压各种压缩文件格式的源代码 支持 zip, (当然) gzip tar gz bz2 bz 文件包括ant.jar, 源代码 有问题可以留言,我会及时回复 ziptest下面是用来做测试的目录。 请解压到 C:\temp\ziptest ...

Global site tag (gtag.js) - Google Analytics