Lin728
29-07-2003, 12:43
Ich habe ein Problem mit dem DeflateOutputStream:
Damit die Daten sofort und nicht erst in 32k-Blöcken geschrieben werden, die man in einen DeflateOutputStream geschrieben hat, muss man auf dem Stream-Object die Methose finish() ausführen.
Laut Sun-Doku schreibt diese Methode alle noch nicht geschriebenen Daten hinaus, und schließt den Stream, im Gegensatz zu .close() bleibt der darunterliegende Stream aber offen.
Mein Code sieht vereinfach so aus:
DeflaterOutputStream dos = new DeflaterOutputStream(os);
String befehl = "calendar:35:"+weeks+"\n";
dos.write(befehl.getBytes());
dos.finish();
os.flush();
DeflaterOutputStream des = new DeflaterOutputStream(os);
String befehls = "calendar:35:"+1+"\n";
des.write(befehls.getBytes());
des.finish();
os.flush();
Jetzt habe ich das Problem, dass das erste write auf dos noch funktioniert,bei des funktioniert es nicht mehr, auf jeden Fall erhält der BufferedReader auf "der anderen Seite" (sowieso alles auf lokalhost) nichts mehr.
Auf der anderen Seite habe ich einen BufferedReader, der so erzeugt wurde:
BufferedReader r = new BufferedReader(new InputStreamReader(new InflaterInputStreamreader(socket.getInputStream()) );
Nachdem ich zum ersten mal finish() auf einen DeflaterOutputStream aufgerufen habe, liefert bufferedReader.readLine() nur noch null-Strings anstatt zu blocken.
Hier das Lesen des BufferedReaders
while(!line.equals("quit"))
{
line = br.readLine();
if(line!=null)
{
System.out.println(line);
serverParser.readRequest(line);
}
}
Danke
Damit die Daten sofort und nicht erst in 32k-Blöcken geschrieben werden, die man in einen DeflateOutputStream geschrieben hat, muss man auf dem Stream-Object die Methose finish() ausführen.
Laut Sun-Doku schreibt diese Methode alle noch nicht geschriebenen Daten hinaus, und schließt den Stream, im Gegensatz zu .close() bleibt der darunterliegende Stream aber offen.
Mein Code sieht vereinfach so aus:
DeflaterOutputStream dos = new DeflaterOutputStream(os);
String befehl = "calendar:35:"+weeks+"\n";
dos.write(befehl.getBytes());
dos.finish();
os.flush();
DeflaterOutputStream des = new DeflaterOutputStream(os);
String befehls = "calendar:35:"+1+"\n";
des.write(befehls.getBytes());
des.finish();
os.flush();
Jetzt habe ich das Problem, dass das erste write auf dos noch funktioniert,bei des funktioniert es nicht mehr, auf jeden Fall erhält der BufferedReader auf "der anderen Seite" (sowieso alles auf lokalhost) nichts mehr.
Auf der anderen Seite habe ich einen BufferedReader, der so erzeugt wurde:
BufferedReader r = new BufferedReader(new InputStreamReader(new InflaterInputStreamreader(socket.getInputStream()) );
Nachdem ich zum ersten mal finish() auf einen DeflaterOutputStream aufgerufen habe, liefert bufferedReader.readLine() nur noch null-Strings anstatt zu blocken.
Hier das Lesen des BufferedReaders
while(!line.equals("quit"))
{
line = br.readLine();
if(line!=null)
{
System.out.println(line);
serverParser.readRequest(line);
}
}
Danke