Socket Gute Idee?: File als byte[] per ObjectIOStream übertragen

DeBukkIt

Mitglied
Schönen Guten Tag allerseits,

ich möchte ein Bild über Sockets übertragen (70 Kilobyte von PC an Android, aber das ist nicht relevant). Nun habe ich an vielen Stellen von Byte-Puffern gelesen und relativ umständlich Stück-für-Stück-Übertragungen.

Dann habe ich selber experimentiert und habe ein Programm zum Laufen gebracht, das
  1. ein File als byte[] einliest,
  2. das byte[] per ObjectOutputStream über Sockets versendet,
  3. per ObjectInputStream auf der Client-Seite empfängt,
  4. per FileOutputStream wieder in eine Datei schreibt.
  5. Funktioniert prächtig!
Java:
//Einlesen
Path path = Paths.get("C://Users//Administrator//Desktop//Map.gif");
byte[] data = Files.readAllBytes(path);
//In den OutputStream schreiben
ObjectOutputStream tempOut = new ObjectOutputStream(tempSocket.getOutputStream());
tempOut.writeObject(new Datapackage("DATA", data));
//[...]

//Auf der Client-Seite empfangen
ObjectInputStream ois = new ObjectInputStream(tempSocket.getInputStream());
byte[] rawByteData = (byte[]) ois.readObject();
//und in eine Datei schreiben
File file = new File("C://Users//Administrator//Desktop//mapFromData.gif");
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
try{
     fos.write(rawByteData);
     fos.flush();
} finally {
     fos.close();
}

Nun die Frage(n):
Ist das eine gute Idee? Könnte das Probleme geben? Wie Datenverlust-geschützt ist die Übertragung per ObjectIOStreams?



Vielen Dank im Voraus allerseits!
 

buggy84

Bekanntes Mitglied
Wenn ich mich weit aus dem Fenster lehne, würde ich sagen, dass jede Art von Datenübertragung ein Strom von Bytes ist. Daher funktioniert dein Beispiel auch. Und wenn Du Dir ansieht, von wem die ganzen Stream erben, dann weißt Du auch dass es nur funktionieren kann.

Ob es eine gute oder eine schlechte Idee ist, kannst Du nur selbst entscheiden. Für mich wäre es ok, ich würde es wahrscheinlich ähnlich machen. Vor Datenverlust ist niemand sicher. Du musst prüfen, wo es nötig ist, ob Du auch was bekommen hast. Und wenn Du etwas bekommen hast, dann prüfe man, ob es auch das richtige war. Das geht mit Checksummen. Und auch bei Checksummen gibt es die Möglichkeit, Fehler zu übersehen oder gar Fehler zu machen. Denn was ist z.B., wenn die Checksumme felerhaft übertragen wurde? Jetzt musst Du entscheiden, wer einen solchen Fehler dann handeln soll. Client oder Nicht-Client (Server?)? Du siehst, es ist ziemlich komplex, die Übertragung der Daten an sich ist da ja gar nicht mehr das Problem.
 

Ch4t4r

Aktives Mitglied
Nutzt du TCP (und das tust du, da es der Standard ist), ist die Übertragung gesichert, dh es kommt nahezu nie vor, dass Daten fehlen oder fehlerhaft übertragen werden (auch ohne Sicherung gehen nur ca. 1% der Daten verloren).
 

buggy84

Bekanntes Mitglied
Der Datentransfer kann selbstverständlich jederzeit nach dem „Aufbau einer Verbindung“ gestört, verzögert oder ganz unterbrochen werden. Das Übertragungssystem läuft dann in einen Timeout. Der vorab getätigte „Verbindungsaufbau“ stellt also keinerlei Gewähr für eine nachfolgende, dauerhaft gesicherte Übertragung dar.
Auszug aus Wikipedia
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Skallierbare Serverumgebung - Gute Idee? Netzwerkprogrammierung 10
T Performance meiner Idee Netzwerkprogrammierung 2
S Idee für Projekt auf Agentenbasis Netzwerkprogrammierung 8
D CSV File Upload Netzwerkprogrammierung 5
S Webserver für Jar File Netzwerkprogrammierung 4
H Applet soll XML-File auf Server speichern Netzwerkprogrammierung 6
R Apache HttpClient File Download? Netzwerkprogrammierung 3
0 Apache Commons File Object bekommen Netzwerkprogrammierung 4
D Server Client Verbindung - Unexpected End of File - Invalid HTTP Response Netzwerkprogrammierung 4
M HTTP File Upload mit Prozessbar Funktioniert nicht. Netzwerkprogrammierung 8
5 File Upload/ ClassNotFoundException Netzwerkprogrammierung 9
S RSS-Feed aus ini File Netzwerkprogrammierung 4
Z File über Socket lesen Netzwerkprogrammierung 3
N Socket File über Socket vom Server an Client versenden Netzwerkprogrammierung 15
F Protokoll file:/// Netzwerkprogrammierung 2
B JNLP File -> Web Application Netzwerkprogrammierung 10
R HTTP HttpURLConnection Large File Upload Netzwerkprogrammierung 1
DStrohma RMI Security Manager & Policy-File Netzwerkprogrammierung 8
DeviAn Über ein Linux Server ein Windows Server nach einer File fragen Netzwerkprogrammierung 6
P java file.exists() zuzerstörbar Netzwerkprogrammierung 7
E java.net.SocketException: Unexpected end of file from server Netzwerkprogrammierung 2
G SMB-File ausführen Netzwerkprogrammierung 15
J Problem beim Senden von File Netzwerkprogrammierung 4
J Mit der File Api Dateien von anderen Rechnern lesen ? Netzwerkprogrammierung 3
I unc pfad für die klasse file? Netzwerkprogrammierung 4
V file transfer problem Netzwerkprogrammierung 2
E upload progress bei einem http file post Netzwerkprogrammierung 5
L file upload / download über http Netzwerkprogrammierung 5
P File von http-Server kopieren Netzwerkprogrammierung 5
N File Transfer Netzwerkprogrammierung 5
D wie kann ich rmic ein .jar file übergeben? Netzwerkprogrammierung 3
R File chooser übers Netzwerk Netzwerkprogrammierung 3
J File upload mit ftp Netzwerkprogrammierung 4
G file download über https mit p12 Zertifikat Netzwerkprogrammierung 4
D Performance Problem beim File senden, empfangen Netzwerkprogrammierung 4
T file auf einen server laden Netzwerkprogrammierung 4

Ähnliche Java Themen


Oben