2010-04-12 2 views
0

Вот как я сжимают данные:Как получить коэффициент сжатия для файла GZipped?

<%@ 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(); 
%> 
+1

Это будет очень плохо сжиматься в вашем тесте из-за большого количества повторяющегося текста. Вы можете захотеть использовать фактическое содержимое нескольких более крупных страниц, чтобы лучше проверить, как сжатие будет работать для вас. –

ответ

0

Если меня не хватает чего-то здесь вы просто вручную рассчитать размер оригинала, деленное на упакованном.

2

Извините, что звучит суровым, но этот подход совершенно неверен. Во-первых, вы не хотите делать это в JSP-файле по крайней мере по двум причинам: 1) необработанный код Java (scriptlets) принадлежит к реальным Java-классам и 2) JSP предназначен для символьных данных, а не для двоичных данных, это только повредит данные. Во-вторых, любой достойный сервер приложений предоставляет опцию конфигурации, автоматически ли GZIP-ответ или нет. В например Tomcat 6.0, вы можете просто расширить <Connector> элемент в /conf/server.xml с атрибутом compression который установлен в "on":

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

Также см this article для более намеков в отношении производительности WebAPP.

Назад к актуальному вопросу: нет настройки для изменения коэффициента сжатия для GZIP. Это также не нужно.

Update: Я понял, что вы просили получить, не установить. Ну, используйте 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"); 

Тогда просто сделать начальную школу математику, чтобы получить степень сжатия. Разделить, размножить и т. Д.)

Смежные вопросы