`
尘枉_yjava
  • 浏览: 75208 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Sun 自带的Gzip压缩解压xml实例

    博客分类:
  • web
 
阅读更多
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

import org.apache.commons.io.IOUtils;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class TestXml {

/**
   * 压缩
   */
  public static String zipXml(String str) throws IOException {
if (str == null || str.length() == 0) {
return str;
}
BASE64Encoder base64encoder = new BASE64Encoder();
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out);
gzip.write(str.getBytes("UTF-8"));
gzip.close();
return base64encoder.encode(out.toByteArray());
}
 
  /**
   * 解压
   */
public static String unZipXml(String str) throws IOException {
if (str == null || str.length() == 0) {
return str;
}
BASE64Decoder base64decoder = new BASE64Decoder();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] bytes = base64decoder.decodeBuffer(str);
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
GZIPInputStream gunzip = new GZIPInputStream(in);
byte[] buffer = new byte[256];
int n;
while ((n = gunzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
return out.toString("UTF-8");
}

public static void main(String[] args) throws IOException {
InputStream is = null;
try {
File file = new File("E:hz.xml");
is = (InputStream )new FileInputStream(new File("E:hz.xml"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}

// Byte[] bt = null;
// BufferedInputStream input = new BufferedInputStream(is);// 输入流,用于接收请求的数据
// ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(2048);// 请求数据存放对象,使用了参数2048
//
// byte[] bufferRead = new byte[1024];// 数据缓冲区
// int count = 0;// 每个缓冲区的实际数据长度
//
// while ((count = input.read(bufferRead)) != -1) {
// byteOutput.write(bufferRead, 0, count);
// }
List ioList =  IOUtils.readLines(is);
StringBuilder sb = new StringBuilder(1024);
for(int  i =0; i < ioList.size() ; i++){
sb.append(ioList.get(i));
}
String inStr = sb.toString();
System.out.println("原长度:" + inStr.length());
String outStr = zipXml(inStr);
System.out.println("长度:" + outStr.length());
System.out.println((double)inStr.length()/outStr.length());
System.out.println("压缩比:" + (double)(int)(((double)inStr.length()/outStr.length() + 0.005) * 100) / 100 + " : 1");
System.out.println("压缩后内容:" + outStr);
// String unStr = unZipXml(outStr);
// System.out.println("长度:" + unStr.length());
// System.out.println("解压后内容:" + unStr);
}

}
分享到:
评论

相关推荐

    Servlet规范文档

    过滤器可以用于实现如登录检查、GZIP压缩、字符编码转换等功能,且能链式使用,提高代码复用。 5. **监听器(Listener)**:监听器是实现了特定接口的类,用于监听Servlet上下文、会话或Servlet实例的特定事件。...

    Servlet Jar包

    7. **Filter和Listener**:Servlet规范还定义了Filter和Listener接口,Filter可以拦截请求并进行预处理或后处理,比如登录检查、GZIP压缩等。Listener可以监听Web应用中的特定事件,如session创建、销毁、请求初始化...

    Ajax 入门精通 Ajax 入门精通

    利用HTTP头部优化网络传输,如GZIP压缩。 7. **现代Web API - Fetch API** - Fetch API 是一个现代的替代XMLHttpRequest的方式,它返回Promise,使得异步操作更容易理解和处理。 总结,Ajax作为网页开发中的重要...

    servlet-api.jar

    例如,可以使用Filter实现登录验证、GZIP压缩等功能。 5. **ServletContext**: - 它提供了全局的信息共享,比如在整个Web应用中存储和获取数据,或者注册监听器。 6. **ServletConfig**: - 每个Servlet实例都...

    深入JAVA Servlet网络编程

    例如,登录验证、GZIP压缩、字符编码转换等都可以通过过滤器实现。 7. **监听器(Listener)**:Servlet规范定义了一系列事件监听器接口,如`ServletContextListener`、`HttpSessionListener`等,可以监听Servlet上...

    j2ee 笔记 j2ee 笔记 j2ee 笔记

    J2EE(Java 2 Platform, Enterprise Edition)是Sun Microsystems为简化企业级应用开发而提出的一套技术标准,它提供了构建分布式系统的基础框架。在J2EE环境中,开发者可以利用多种组件模型来构建复杂的应用程序,...

Global site tag (gtag.js) - Google Analytics