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:
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:
Auf der Gegenseit wird so ausgelesen:
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.
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)
...;
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();
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();
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.