kennst du denn grundsätzlich Streams?
kann man in einem Lehrbuch nachlesen
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 14.3 Stream-Klassen und Reader/Writer am Beispiel von Dateien
naja, vielleicht nicht allzu deutlich,
es geht jedenfalls um das Schreiben und Lesen von Daten, z.B. in Form von byte[], das ist die übliche Übertragungsform derartiger Daten,
read und write machen sowas, read( b, 0, b.length ) ist nicht viel anders, der zweite und dritte Parameter gibt an, von wo bis wo das Array zu beschreiben ist, Anfang bis Ende, nicht sehr spannend
bei dem CompressStreams kann man mit DEFAULT_SYNC_SIZE_GZIP_BYTES angeben, ab wieviel bytes die Daten komprimiert und versendet werden sollen,
je länger erst Daten gesammelt werden, desto besser lassen sich die großen Mengen Bytes komprimieren, aber das kostet auch Speicher zum Sammeln und der Empfänger erhält erstmal gar nix, und dann den ganzen Berg aufeinmal,
komprimiert ist es zunächst nicht so viel, kann aber möglicherweise erst entpackt werden wenn alles da ist und auch beim Empfänger entstehen dann große Datenmengen, die zwischengespeichert werden müssen,
bei flush() wird immer gesendet, auch wenn nur wenige bytes da sind,
die Metadaten sind intern im Compress-Stream, muss dich eigentlich nicht interessieren,
hier habe ich den Quellcode gefunden:
JavaTechniques Compressing Data Sent Over a Socket
da sieht man wie die 8 Bytes gesendet und empfangen werden, beschreiben die Länge der Daten,
ist schon wichtig wann alles da ist, wann entpackt werden kann usw.