Wieviel byte versendet mein Sevlet ?

xrax

Erfahrenes Mitglied
Hallo zusammen,

ich bekomme mit einem javax.servlet.http.HttpServlet anfragen unserer User und antworte dann entsprechend.

Teils gebe ich einen String zurück,

Java:
  void responseMessage(String message,HttpServletResponse res){
     try {
       PrintWriter toClient = res.getWriter();
        toClient.println(message);
        toClient.flush();
        toClient.close();
     } catch (IOException e) {
       e.printStackTrace();
     }
   }

Teils sende ich Files,

Java:
OutputStream os=response.getOutputStream();
FileInputStream fis = new FileInputStream(file);
     byte[] buffer = new byte[BUFFER_SIZE];
     int bytesRead = 0;
     while ((bytesRead = fis.read(buffer)) > 0) {
       os.write(buffer, 0, bytesRead);
     }
     os.flush();
     fis.close();
     os.close();

Ich möchte jetzt mitloggen wieviel byte ich insgesamt (mit Header) an den client sende.

Ist es korrekt wenn ich bei dem String einfach die Anzahl der Zeichen mal 2 nehme und ich hab die Bytes?
Wäre es beim Fileresponse die addition der bytesRead ?
Kommt dann noch was dazu ? Was ist mit dem Header ?

Besten Dank
xrax
 
Hi

zu den Nutzdaten:

Bei der Datei ist es vom Prinzip her richtig, also die Summe der bytesRead für alle Schleifendurchläufe.
Ein potenzielles Problem ist, dass read ganz am Ende nicht 0 sondern -1 returnt,
und die Schleife damit eben abbricht; aber wenn man in der Schleife aufsummiert macht das nichts.

Beim String gehts nicht so. Laut Doku (http://docs.oracle.com/javaee/7/api/javax/servlet/ServletResponse.html) verwendet der Writer ISO8859-1, wenn man nichts Anderes angegeben hat, das wäre 1 Byte pro Zeichen im String; allerdings aus vielen Gründen nicht empfehlenswert. Dort ist auch beschrieben, mit welcher Methode man das ändert, UTF-8 wäre gut. In dem Fall kann man die Byteanzahl nicht mehr aus der Stringlänge einfach ermitteln, weil je Zeichen eine andere Länge verwendet werden kann (1,2,3,4). Für einen String s kann man die UTF8-Länge (unabhängig vom Servletzeug) mit s.getBytes("UTF-8"); emritteln.

Und zu den Headern...welche? HTTP, TCP, IP, sonstwas...? Bilderübertragungen und Ähnliches mitzählen oder nicht? usw.usw. Wenn das irgendwie für den Code zur Laufzeit wichtig ist, bitte ändern, weil das mitzuzählen sehr kompliziert werden kann. Wenn man nur ab und zu manuell nachschauen will, für welchen Grund auch immer: zb. Wireshark zeigt die Längen an...
 
Zurück