如何获得GZipped文件的压缩率?

时间:2010-04-12 20:49:59

标签: java jsp zip

以下是我压缩数据的方法:

<%@ page import="javax.servlet.jsp.*,java.io.*,java.util.zip.*" %>

<%
String encodings = request.getHeader("Accept-Encoding");
PrintWriter outWriter = null;

if ((encodings != null) && (encodings.indexOf("gzip") != -1)) {
  OutputStream outA = response.getOutputStream();
  outWriter = new PrintWriter(new GZIPOutputStream(outA), false);
  response.setHeader("Content-Encoding", "gzip");
  int a = response.getBufferSize();
  System.out.println("ZIPPED VERSION BF:"+a);
} 
else {
  System.out.println("UN-ZIPPED VERSION");
  outWriter = new PrintWriter(response.getOutputStream(), false);
}

outWriter.println("<HTML><BODY>");

for(int i=0; i<1000; i++) {
  outWriter.println(" blah blah blah<br>");
}

outWriter.println("</BODY></HTML>");
outWriter.close();
%>

2 个答案:

答案 0 :(得分:2)

抱歉听起来很苛刻,但这种做法完全错了。首先,您不希望在JSP文件中执行此操作,原因至少有两个:1)原始Java代码( scriptlet )属于真正的Java类,2)JSP用于字符数据,不是二进制数据,它只会破坏数据。其次,任何体面的appserver都提供配置选项,是否自动GZIP响应。例如Tomcat 6.0,您只需使用设置为<Connector>的{​​{1}}属性扩展/conf/server.xml中的compression元素:

"on"

另请参阅this article以获取有关webapp性能的更多提示。

回到实际问题:没有设置来改变GZIP的压缩比。它也不需要。

更新:我意识到您要求获取,而不是设置。好吧,使用HTTP客户端并计算<Connector ... compression="on" /> 的长度。以下是java.net.URLConnection的帮助下的基本启动示例:

InputStream

然后只需进行小学数学计算即可获得压缩率。分割,乘法等;)

答案 1 :(得分:0)

除非我在这里遗漏了什么,否则你只需手动计算原始尺寸除以压缩尺寸。