Ende des Streams ohne Schließen/Checksumme mitsenden

Status
Nicht offen für weitere Antworten.

MJA

Mitglied
Hallo.

Ich habe eine eher simple Frage, ich hoffe zumindest, dass es dafür eine einfache Lösung gibt.
Ich schreibe über TCP in einen CheckedOutputStream, der auf der anderen Seite von einem CheckedInputStream ausgelesen wird. Ich übertrage auf diesem Weg beliebige Dateien. Beide Streams bilden während der Übertragung eine Adler32-Prüfsumme. Um feststellen zu können, ober alle Daten verlustfrei übertragen wurden möchte ich den Wert der Prüfsumme am Ende mitschicken.
Das Auslesen binärer Streams wird ja oft so gemacht:
Code:
int c;
while((c = stream.read()) != -1)
...;
Die Schleife bricht erst ab, wenn die read()-Methode -1 zurückgibt. Das tut sie aber nur, wenn der Stream geschlossen wird. Da ich aber verhindern möchte, dass die Prüfsumme mit in die Datei geschrieben wird muss ich dafür sorgen, dass ich sie vom eigentlichen Inhalt der Datei unterscheiden kann. Ich hatte erst daran gedacht:
Code:
FileInputStream fileInputStream = new FileInputStream(file);
CheckedOutputStream checkedOutputStream = new CheckedOutputStream(socket.getOutputStream(), adler32);
				
int input;
				
while((input = fileInputStream.read()) != -1)
checkedOutputStream.write(input);
				
PrintStream printStream = new PrintStream(socket.getOutputStream());
printStream.println(adler32.getValue());
			
socket.close();
fileInputStream.close();
Auf der Gegenseit wird so ausgelesen:
Code:
FileOutputStream fileOutputStream = new FileOutputStream(file);
CheckedInputStream checkedInputStream = new CheckedInputStream(socket.getInputStream(), adler32);
			
int input;
while((input = checkedInputStream.read()) != -1)
fileOutputStream.write(input);

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			
String checksumString = bufferedReader.readLine();
			
socket.close();
fileOutputStream.close();
Natürlich funktioniert das nicht, die Checksumme wird ans Dateiende geschrieben und checksumString ist null. Also habe ich überlegt, wie ich es schaffen kann, die while-Schleife an der entsprechenden Stelle zu unterbrechen. Wenn man -1 über die write()-Methode versendet kommt auf der anderen Seite ein ÿ herraus. D.h. so kann ich den Vorgang nicht abbrechen. Das geht nur, in dem ich den Stream schließe. Dann kann ich die Prüfsumme aber nicht versenden.
Weiß jemand, wie ich die while()-Schleife unterbrechen könnte? Muss ich vielleicht einen bestimmten anderen Wert senden? Weiß jemand eine andere Möglichkeit, die Prüfsumme mitzuschicken, ohne sie in die Datei zu schreiben?
Wichtig ist, dass ich damit pauschal jede Art von Datei versenden können soll.

Gruß,
Jan.
 

Bleiglanz

Gesperrter Benutzer
weisst du vorher, wieviele bytes du sendest?

wenn ja: schreib die länge -> schreib den inhalt -> schreib die checksum

dann weisst du beim lesen, wann die checksum kommt

wenn nicht: arbeitest du nur mit strings?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
1 SSH-Kommunikation - Ende eines Streams nicht erkenntlich Netzwerkprogrammierung 2
M Socket, Ende Dateitransfer Netzwerkprogrammierung 4
K Ende eines HTTP Response/Request Netzwerkprogrammierung 6
G Sockets und HTTP: Ende des Datenempfangs erkennen Netzwerkprogrammierung 3
K "Ende eines Sockets" Netzwerkprogrammierung 9
U Ende eines Inputstreams ermitteln Netzwerkprogrammierung 3
m@nu Ende von Stream bei HTTP-Request Netzwerkprogrammierung 3
D Timeouts ohne Ende bei SMTP und FTP Netzwerkprogrammierung 3
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
E Verfügbarkeit von Daten in Streams Netzwerkprogrammierung 4
V HTTP Streams setzen Netzwerkprogrammierung 10
N Socket Fehler bei Streams 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
P Probleme mit Input- / Output-Streams Netzwerkprogrammierung 2
M Probleme beim Abfangen von Streams Netzwerkprogrammierung 5
8 Socket Streams nur mit Byte? Netzwerkprogrammierung 2
E frage zu streams Netzwerkprogrammierung 2
F ResultSet in Streams Netzwerkprogrammierung 8
C IRC CHAT auslesen -> Sockets/input und output Streams Netzwerkprogrammierung 9
T TCP mit und ohne Threads Netzwerkprogrammierung 1
V Socket Audio Clip loopen ohne neuen Thread Netzwerkprogrammierung 2
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
Q-bert Link zugang ohne login sperren. Netzwerkprogrammierung 1
L Socket Zwei Computer im gleichen Netwerk ohne Portforwarding ? Netzwerkprogrammierung 12
J HTTP Befehl via HTTP senden ohne Browser öffnen Netzwerkprogrammierung 3
B JSch Filetransfer ohne KnownHosts Datei? Netzwerkprogrammierung 0
D GZIP InputStream lesen ohne zu encoden Netzwerkprogrammierung 1
T UDP Pakete empfangen ohne Programm zu blockieren Netzwerkprogrammierung 3
D Zugriff auf Webinhalte ohne visuelles Öffnen der Website Netzwerkprogrammierung 2
T Anwendungseinstellungen ohne Datei übertragen? Netzwerkprogrammierung 8
B Socket BufferedImage senden "ohne speichern" Netzwerkprogrammierung 7
N (TCP) Verbindung ohne Portforwarding Netzwerkprogrammierung 12
B Socket BufferedReader.readLine() beenden ohne den Stream zu closen Netzwerkprogrammierung 7
D Mit wsimport erstellte Klassen ohne WSDL nutzen Netzwerkprogrammierung 4
T Datei downloaden ohne den Dateinamen zu kennen Netzwerkprogrammierung 2
D RMI Gui auf client updaten basierend auf den Property Änderung des Models auf dem Server ohne polling Netzwerkprogrammierung 12
B FTP Datei auslesen ohne einloggen möglich? Netzwerkprogrammierung 19
E RMI ohne Portforwarding? Netzwerkprogrammierung 2
M Ping mehrerer Ports aus int[] ohne for-Schleifendurchlauf Netzwerkprogrammierung 11
C Login ohne Erfolg Netzwerkprogrammierung 2
L einfacher server ohne threads Netzwerkprogrammierung 4
P RMI ohne Security Netzwerkprogrammierung 5
J Client ohne Server? Netzwerkprogrammierung 7
K Socket Daten lesen ohne Längenangabe Netzwerkprogrammierung 19
0 soap client ohne WSDL Netzwerkprogrammierung 3
J Connection Speed Test ohne Applet Netzwerkprogrammierung 5
E DatagramSocket rausfinden ob recive möglich ohne zu blocken Netzwerkprogrammierung 10
O Webservice ohne Eclipse laufen lassen Netzwerkprogrammierung 3
T Server ohne Port Netzwerkprogrammierung 4
L RMI Programm beendet ohne Fehler sofort nach Start (Windows 2000) Netzwerkprogrammierung 7
C imap/java emails checken ohne runterzuladen? Netzwerkprogrammierung 3
T ohne Port Freigabe. Netzwerkprogrammierung 6
P P2P ohne Portfreigabe Netzwerkprogrammierung 12
J Client-Client-Chat ohne Serverbeteiligung Netzwerkprogrammierung 2
G Connection zu MySQL ohne ODBC Netzwerkprogrammierung 8
G TCP Verbindung überprüfen OHNE daten zu verschicken Netzwerkprogrammierung 11
T select() ohne NIO - oder wie Worker-Thread sauber beenden? Netzwerkprogrammierung 9
Paule Connection Applet Servlet ohne Socket bzw RMI Netzwerkprogrammierung 2
L http kommunikation mit und ohne multipart Netzwerkprogrammierung 4
R RMI: Remote Object ohne Naming Service benutzen? Netzwerkprogrammierung 2
K RMI ohne Kommandozeileneingabe Netzwerkprogrammierung 9
G SSL Verbindung ohne Zertifikat Netzwerkprogrammierung 9
M Client-Kommunikation ohne Server Netzwerkprogrammierung 7
M schreiben auf geschlossenen Socket ohne Exception Netzwerkprogrammierung 6
A server mit 2 Ports : Mit und ohne SSL Chat system Netzwerkprogrammierung 10
K Applet - Servlet Kommunikation ohne Sockets Netzwerkprogrammierung 5
J Vom BufferedReader lesen -> hängt ohne Fehler,ohne Except Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben