这是我压缩数据的方法:
<%@ 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/