GZIPStream

Nardian

Bekanntes Mitglied
Hi

ich habe folgendes szenario:

ich habe größere datenmengen, die ich an einen andern computer senden möchte... soweit kein problem, allerdings sollte das auch mit internet gut laufen, da bietet sich eben GZIPStream an..
allerdings kann es vorkommen dass ich hin und wieder pausen einlege - allerdings will ich die letzten daten trotzdem noch senden

da gzip leider auf flush nicht sonderlich reagiert, und finish zwar das erwünschte ergebnis liefer, allerdings kann man nach finish nicht mehr weitere daten senden (welche überraschung bei dem namen), sehe ich nicht wirklich wie das gehn könnte.

hat hier jemand eine idee? eine art workaround?

hab mal versuch von GZIPOutputstream zu extenden,
super.write
super.finish
def.reset
aufzurufen... soweit klappt das auch ganz gut (beim inputstream ziemlich genau so, nur ohne finish)..
allerdings werden die daten auf einmal nicht mehr gsendet (ich schätze mal wenn der input-buffer oder sowas voll wird... das ist nur eine annahme, sagt ruhig wenn das ein schwachsinn ist ^^ hab kein problem damit :p)

aber trotzdem würde ich gerne eine methode haben mit denen ich eine art flush forcen kann, beim gzip

(allerdings bitte nicht "dummy-daten in den gzip schreiben bis er endlich sendet" oO)

thx schon jetzt
 
S

SlaterB

Gast
ist das Problem, dass bei finish nichts mehr auf der alten Verbindung gesendet werden kann und eine neue nicht in Frage kommt?
dann trenne Verbindung und GZIP, über den Verbindungs-Stream werden allein Bytes übertragen

wenn eine Nachricht aus GZIP-Bytes besteht, dann macht der Sender einen separaten GZIP-Stream auf,
schreibt da alles rein + Finish und die erzeugten Bytes gehen über den Verbindungsstream zum Empfänger

----

der Empfänger muss die Bytes interpretieren, wenn du wirklich spürbare Pausen hast, kann man die dazu nutzen,

nach einer Pause sind alle zusammenhängend empfangenen Daten Teil eines GZIP-Datenstroms,
evtl. die ersten 50 Bytes separat für Infos reservieren

diese Daten werden herausgenommen und interpretiert, die Verbindung ist davon nicht betroffen
 

Nardian

Bekanntes Mitglied
erm - nein ... die erwähnten pausen sind wohl nicht lang genug für sowas, und bei jedem "packet" dass ich schicke einen neuen stream aufzumachen ist nicht gerade sauber..

also die pausen sind recht kurz, und es gibt leider so ca 100+ packete die sekunde..
und ja - wie gesagt, ich würde gern nach jedem packet eine art flush machen, aber wenn das bedeutet dass ich nen neuen GZIP aufmachen muss... nicht besonders schön :(
 

Neue Themen


Oben