Verfügbarkeit von Daten in Streams

eumeldeumel

Mitglied
Hi,

ich hab eine Frage zur Funktionsweise von Streams.

Also mein Problem ist, dass ich Objekte mit variabler Größe mit einem Stream übermitteln will. Ich frage mich jetzt, ob, wenn ich ein byte[] in meinen Stream schreibe und gleichzeitig beim Client mit read() auf verfügbare Daten warte, dann der Client das Objekt stückweise bekommt.
Also "schiebt" der Sender einfach die Daten in die Röhre und der Empfänger der auf die read()-Methode wartet bekommt sie häppchenweise, oder schreibt der Sender in den Stream, und erst wenn er fertig ist gibt mir die read()-Methode das ganze Objekt aus?

Ich hoffe ich hab einigermaßen verständlich ausgedrückt wo ich hänge :)

Gruß
R.
 
T

tröööt

Gast
wenn überhaupt heißt die methode InputStream.available() ... und diese methode gibt nur die menge an bytes zurück die OHNE blockieren durch read() gelesen werden können ...
sie gibt also keinerlei auskunft über irgendwelche größen und längen ... sondern dient lediglich als anhaltspunkt wie viel man beim nächsten call von read() aus dem stream lesen kann ohne das diese methode blockiert ...
wobei es jedoch nur ein richtwert ist ... und entweder genau gleich der menge an verfügbaren bytes ist oder kleiner .. aber niemals größer (siehe API-doc)

da TO jetzt aber von Objekten redet muss man auf den InputStream noch mindestens einen ObjectInputStream aufsetzen ...
auch diese klasse bietet nur die methode "available()" mit dem oben beschriebenen verhalten ...

eine methode "availableBytes()" gibt es also erstmal überhaupt nicht

wenn man nun auf einen ObjectInputStream readObject() callt wird intern auch auf wieder auf read() zugegriffen und natürlich die daten "stückchenweise" gelesen und dann zu einem objekt wieder zusammen gesetzt ...

ObjectInputStream.readObject() returned also erst wenn ALLES gelesen und daraus wieder ein gültiges, vollständiges objekt erzeugt wurde ...

oder habe ich an der frage jetzt irgendwas missverstanden ... weil "Objekte" und "byte[]" passt irgendwie nicht zusammen ...

grundsätzlich ist es aber so das natürlich nur maximal das gelesen werden kann was im buffer des stacks des OS liegt ... und wenn da halt noch nicht genug daten drin sind damit read() ohne blockieren returnen kann wird halt so lange gewartet bis entsprechend so viele daten gelesen werden können bis der buffer gefüllt ist ...

dabei ist es völlig gleich was auf der OutputStream.write() seite passiert ...


wenn diese antwort jetzt nicht klärend war bitte die frage neu formulieren
 

eumeldeumel

Mitglied
danke für die antworten :)
ich hab den tag über heute meine klassen entsprechend umgestellt ums zu testen :)
Mein Client schreibt ein serialisiertes Objekt in den Stream und der Server prüft in ner schleife ob available() > 0 ist. wenn ja, dann les ich alle auf einen schlag aus und deserialisiere sie wieder.
bis jetzt kommen alle objekte ganz an.
ich werds noch mit größeren objekten testen, aber bis jetzt siehts gut aus :)

btw., es ging darum eine kleine klassenbibliothek zu schreiben die mir server-client kommunikation für spätere projekte abnimmt :)

ich hatte einfach sorge, dass wenn ich ein großes serialisiertes objekt in den stream schreib, dann meine empfangsmethode bei der hälfte anschlägt und ich beim deserialisieren ne exception bekomme ;)

danke für die antworten :)
 
T

tröööt

Gast
wie gesagt : wenn es um objekt-serialisierung geht dann nutze einfach Object*Stream ... der kümmert sich um alles ... da brauchts kein InputStream.available() ... zu mal das intern eh genutzt wird ... das muss man nicht doppelt machen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Verständnisfrage Verfügbarkeit Socketverbindung Netzwerkprogrammierung 5
P Verfügbarkeit Netzwerkdrucker abfragen Netzwerkprogrammierung 2
K Mit Java-MailAPI dir Verfügbarkeit eines SMTP-Servers prüfen Netzwerkprogrammierung 4
OnDemand Daten per API senden, parallel Netzwerkprogrammierung 9
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
Z Kann nicht Daten vom Server lesen Socket Netzwerkprogrammierung 10
S Daten über TCP/IP senden Netzwerkprogrammierung 3
B Daten an Javaprogramm per URI Aufruf übergeben Netzwerkprogrammierung 7
N websocket - keine Daten mehr nach ca 80 Sekunden Netzwerkprogrammierung 0
C Spezielle Daten aus Website entnehmen Netzwerkprogrammierung 5
H Daten auf einer Webseite eintragen Netzwerkprogrammierung 11
A Socket Daten in Textdokument speichern? Netzwerkprogrammierung 1
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
J Daten von einem HTML-Textfeld abrufen Netzwerkprogrammierung 3
S Fakturierungsprogramm - Daten aktuell halten (blutiger Anfänger) Netzwerkprogrammierung 1
D Mit Server Daten austauschen Netzwerkprogrammierung 4
K Server liest Daten nicht Netzwerkprogrammierung 6
L HTTP Daten an Server übergeben Netzwerkprogrammierung 2
R Daten von Cloud laden Netzwerkprogrammierung 5
fLooojava Daten an ein Arduino im selben Netzwerk senden Netzwerkprogrammierung 1
X Daten können nicht sofort empfangen werden Netzwerkprogrammierung 1
S Server - Mehrere Klassen sollen Daten senden und empfangen Netzwerkprogrammierung 25
P Socket Best Practice: Daten bündeln Netzwerkprogrammierung 5
F Daten aus Internetseiten auslesen Netzwerkprogrammierung 56
S Server Client Daten hin und herschicken Netzwerkprogrammierung 2
S Seltsames Verhalten beim Empfangen von Daten über DataInputStream Netzwerkprogrammierung 12
P Socket Daten senden mit ServerSocket? Netzwerkprogrammierung 2
H Daten an Textfeld einer Webseite schicken Netzwerkprogrammierung 2
A versch. Daten im Stream erkennen Netzwerkprogrammierung 2
D daten per post senden Netzwerkprogrammierung 3
M Senden von Daten nicht direkt möglich? Netzwerkprogrammierung 6
J Applet soll Daten auf Server ablegen - einfachster Weg fuer n00bs? Netzwerkprogrammierung 4
F Socket Daten über verschiedene IP's schicken Netzwerkprogrammierung 5
F UDP Daten kommen nicht an Netzwerkprogrammierung 22
E Socket OutputSream abbruch.Wegen zuviel !empfangener! Daten? Netzwerkprogrammierung 10
C Client zu Client Daten übertragen Netzwerkprogrammierung 13
S Thread, Daten vom Socket lesen Netzwerkprogrammierung 2
S Socket XML-Daten und Parameter an Server schicken Netzwerkprogrammierung 3
M Objekt über Object-Stream, empfange "alte" Daten Netzwerkprogrammierung 2
P HttpClient - Daten einer Website "unvollständig" Netzwerkprogrammierung 5
P Server/Client Daten empfangen, wenn Daten gesendet werden Netzwerkprogrammierung 9
K Socket Daten lesen ohne Längenangabe Netzwerkprogrammierung 19
T RMI Effizenteste Übertragung von Daten Netzwerkprogrammierung 6
A Socket Client Server Connection wird aufgebaut aber keine daten geschickt. Netzwerkprogrammierung 5
B Socket Daten empfangen funktioniert nicht richtig - wo liegt der Fehler? Netzwerkprogrammierung 7
Kr0e Versenden von Daten übers Netzwerk Netzwerkprogrammierung 30
E Daten kommen anders an als gesendert ?! Netzwerkprogrammierung 6
S HttpURLConnection POST splittet Daten in zwei Pakete Netzwerkprogrammierung 9
F POST-Daten sende Netzwerkprogrammierung 3
E HTTPS Debuggen (verschlüsselte Daten anzeigen)? Netzwerkprogrammierung 12
N Per POST -Methode Daten an den Web-Server übertragen. Netzwerkprogrammierung 9
Iron Monkey Große Daten ins Vector füllen Netzwerkprogrammierung 4
S Probleme beim senden von Daten per POST Methode an PHP Scrip Netzwerkprogrammierung 5
D Daten, die mit PHP erzeugt werden, mit Java auslesen Netzwerkprogrammierung 8
M Ethernet Daten abfangen Netzwerkprogrammierung 13
F Daten senden und empfangen mit Applet Netzwerkprogrammierung 8
I Problem beim empfangen von Daten (Zahlen) Netzwerkprogrammierung 7
S Daten per GET-Methode Netzwerkprogrammierung 2
H Server soll Daten schicken, aber wie? Netzwerkprogrammierung 47
M Socket schließt bevor Daten komplett geladen Netzwerkprogrammierung 5
C Flash Daten an Java senden, wie serialisieren? Netzwerkprogrammierung 3
E rxtx serielles senden von Daten Netzwerkprogrammierung 2
D Socket, Daten über BufferedWriter senden Netzwerkprogrammierung 18
G TCP Verbindung überprüfen OHNE daten zu verschicken Netzwerkprogrammierung 11
M Daten übers Netz verschlüsselt übertragen? Wie? Netzwerkprogrammierung 18
J Post-Daten an URL schicken Netzwerkprogrammierung 2
U Image erzeugen aus empfangenen Daten Netzwerkprogrammierung 7
A Wie werden Daten versendet? "Crashcode" Netzwerkprogrammierung 4
D Frage: Buffered Reader --> Wie komm ich an die Daten (Byt Netzwerkprogrammierung 3
G unvollständige Daten: Http Client-Server-Kommunikation Netzwerkprogrammierung 2
E Multi-Part Form-Daten mit HttpURLConnection Netzwerkprogrammierung 6
A Datenverlust (zuviele Daten!) über Sockets Netzwerkprogrammierung 4
T Daten über GSM verschicken Netzwerkprogrammierung 4
M Einfachste Möglichkeit aus'm Applet Daten an Server senden Netzwerkprogrammierung 6
P Verschiedene Daten über einen Stream Netzwerkprogrammierung 4
M Verliere Daten mit WinXP Netzwerkprogrammierung 10
O eingehende Daten speichern Netzwerkprogrammierung 3
D UDP-Daten anzeigen Netzwerkprogrammierung 2
D Daten per Server- Client nur als byte verschicken? Netzwerkprogrammierung 3
A daten an php script per post senden und ausgabe einlesen Netzwerkprogrammierung 6
M Verständnisfrage zu den Streams Netzwerkprogrammierung 7
J Threads & Streams Netzwerkprogrammierung 9
N Paket-Analysieren Byte-Streams Netzwerkprogrammierung 12
C Socket Cipher Streams Netzwerkprogrammierung 6
V HTTP Streams setzen Netzwerkprogrammierung 10
N Socket Fehler bei Streams Netzwerkprogrammierung 2
1 SSH-Kommunikation - Ende eines Streams nicht erkenntlich Netzwerkprogrammierung 2
D Socket Streams schliessen .. Exception gewollt? Netzwerkprogrammierung 4
B Server mit meheren Streams/Aufgaben? Netzwerkprogrammierung 9
H RMI RPC "not suitable for streams and.." Netzwerkprogrammierung 2
T HTTP Encoding von Http-Streams Netzwerkprogrammierung 2
L mehrere Streams über einen Socket? Netzwerkprogrammierung 8
V Mehrere Streams durch einen Stream senden Netzwerkprogrammierung 14
M Streams verwenden Netzwerkprogrammierung 3
A Streams per RMI übergeben Netzwerkprogrammierung 6
P problem beim schließen eines Streams Netzwerkprogrammierung 6
K Selbe Streams mehrfach nutzen (zusätl. Thread) Netzwerkprogrammierung 6
J while-Schleife / Abbruchbed. beim Einlesen eines Streams Netzwerkprogrammierung 4
J Länge eines Streams Netzwerkprogrammierung 4
M Streams Bündeln Netzwerkprogrammierung 10

Ähnliche Java Themen


Oben