java - 如何获取 GZipped 文件的压缩率?

标签 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();
%>

最佳答案

抱歉,听起来很刺耳,但这种做法是完全错误的。首先,您不想在 JSP 文件中执行此操作,至少有两个原因:1) 原始 Java 代码 (scriptlet) 属于真正的 Java 类,2) JSP 用于字符数据,不适用于二进制数据,它只会损坏数据。其次,任何像样的应用程序服务器都会提供是否自动对响应进行 GZIP 压缩的配置选项。例如Tomcat 6.0 ,您只需扩展 <Connector> /conf/server.xml 中的元素与 compression属性设置为 "on" :

<Connector ... compression="on" />

另请参阅this article有关网络应用程序性能的更多提示。

回到您的实际问题:没有设置可以更改 GZIP 的压缩比。也不需要。

更新:我意识到您要求获取,而不是设置。好吧,使用 HTTP 客户端并计算 InputStream 的长度。这是在 java.net.URLConnection 的帮助下的基本启动示例:

URLConnection connection = new URL("http://localhost/context/page.jsp");
connection.setRequestProperty("Accept-Encoding", "gzip"); // Outcomment this to turn off GZIP.
InputStream input = connection.getInputStream();
ByteArrayOutputStream output = new ByteArrayOutputStream();
for (int data = 0; (data = input.read()) != -1; output.write(data));
System.out.println("Length: " + output.toByteArray().length + " bytes");

然后做一下小学数学就可以得到压缩比了。除法、乘法等;)

关于java - 如何获取 GZipped 文件的压缩率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2625340/

相关文章:

jsp - 如何使用 "<%=request.getContextPath()%>"比 "../"更好

html - 单击一个框架中的链接并在另一个框架中显示 JSP

c# - Java ZIP 文件从一个 zip 复制并粘贴到另一个 zip

java - 保存自定义 ListView 的实例状态?

java - 隐藏 <s :param> from the url

java - Button.setEnabled() 导致 EdiTtext 崩溃

python - 如何使用 python 重命名 zip 存档中的文件?

erlang - 在 Elixir 中声明 zip 存档内容的最佳方法是什么?

java - 如何将 jtextfield 值作为日志保存到 .txt 文件?

java - Spring MVC 属性/字段绑定(bind)异常