2010-04-12 3 views
0

Voici comment je compressé les données:Comment obtenir le taux de compression pour un fichier 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

Il va compresser incroyablement bien dans votre test, en raison de la grande quantité de texte répété. Vous pouvez envisager d'utiliser le contenu réel de quelques-unes de vos plus grandes pages pour mieux tester comment la compression fonctionnera pour vous. –

Répondre

0

À moins que je suis absent quelque chose que vous venez de calculer manuellement la taille originale divisée par la taille compressée.

2

Désolé de paraître dur, mais cette approche est totalement fausse. Tout d'abord, vous ne voulez pas faire cela dans un fichier JSP pour au moins deux raisons: 1) le code Java brut (scriptlets) appartient aux classes Java réelles et 2) JSP est pour les données de caractères, pas pour les données binaires, cela ne ferait que corrompre les données. Deuxièmement, n'importe quel serveur d'applications décent fournit une option de configuration pour GZIP automatiquement ou non la réponse. Dans Tomcat 6.0 par exemple, vous pouvez simplement étendre l'élément <Connector> dans /conf/server.xml avec un attribut compression qui est réglé sur "on":

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

Voir aussi this article pour plus de conseils en ce qui concerne la performance webapp.

Retour à votre question actuelle: il n'y a pas de paramètre pour modifier le taux de compression pour GZIP. Ce n'est pas non plus nécessaire.

Mise à jour: Je réalise que vous avez demandé obtenir, pas mis. Eh bien, utilisez un client HTTP et calculez la longueur du InputStream. Voici un exemple de coup d'envoi de base avec l'aide de 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"); 

Puis juste faire les mathématiques à l'école primaire pour obtenir le taux de compression. Diviser, multiplier, etc;)

Questions connexes