Datei über ObjectInputStream versenden

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Mein Problem ist folgendes:

Ich kommuniziere mit einem Server über ObjectInput- und ObjectOutputStreams.

Den Code fuer das Paket vom Server koennt ihr hier sehen:
Code:
package Packages;

import java.io.Serializable;
import MusicAdmin.*;
import java.io.File;
/***
 * Nachrichten, die vom Server an den Client gesendet werden.
 * 
 * @author lundner
 *
 */
public class ServerPackage implements Serializable {
	/***
	 * Playlist, die auf dem Server liegt
	 */
	public Tracklist tracklist;
	/***
	 * File[] - Falls Musikdatei angefordert
	 */
	public File file = null;
	/***
	 * Status des Servers
	 * -1 - unbekannter Status
	 * 0 - Client abmelden
	 * 100 - Tracklist angefordert
	 * 101 - Tracklist aktualisiert
	 * 102 - Tracklist geshuffelt
	 * 103 - Tracklist geleert
	 * 104 - Track geloescht (track ist cArray[1])
	 * 105 - Track wird gespielt (track ist cArray[1])
	 * 106 - Track wird uebertragen (track ist cArray[1]);
	 * 906 - Track nicht gefunden
	 */
	public int status;
	/***
	 * Kommentare des Servers - z.b. unbekannter Befehl durch Client.
	 */
	public String comment;
	/***
	 * Erzeugt ein Serverpackage mit Tracklist, Status und Kommando
	 * @param l
	 * @param stat
	 * @param com
	 */
	public ServerPackage(Tracklist l,int stat,String com){
		tracklist = l;
		status = stat;
		comment = com;
	}
	public ServerPackage(Tracklist l,int stat,String com,File f){
		tracklist = l;
		status = stat;
		comment = com;
		file = f;
	}
}

Je nachdem, welchen Status der Server dem Client übergibt, verarbeitet der Client die Serverpakete anders.

Das klappt auch bisher wunderbar. Bloss bei Status 106 (Wenn ich eine Datei vom Server runterladen möchte, und diese auf meinem lokalen Rechner gespeichert werden soll) habe ich Probleme. Ich möchte die Datei innerhalb dieses Objektes ServerPackage mitversenden.

Danach soll der Client das komplette ServerPackage entgegenehmen und die Datei abspeichern können.

Hier mal die Clientseite, die das ServerPackage wartet...
Code:
	public void run(){
		while(true){
			try {
				//Objektinputstream abfangen
				ObjectInputStream is = new ObjectInputStream(connection.getServer().getInputStream());
				//Package handlen
				handlePackage(is);
			} catch(IOException e1){
				System.out.println("STAT: Server-Verbindung beendet");
				System.exit(0);
			}
		}
	}

Ist es überhaupt möglich, eine komplette Datei über ein ObjectStream zu übergeben?! Performant soll das ganze sowieso nich sein, hauptsache ich kriege es hin! ;-)

MfG Lundner
 

m@nu

Bekanntes Mitglied
es nützt dir nichts, wenn du die instanz einer File-klasse verschickst. das ist lediglich ein handle auf die datei. wirklich auslesen kannst du die datei erst über einen entsprechenden stream.

du kannst dir natürlich eine klasse schreiben, welche z.b. dateiname & ein byte-array mit dem inhalt der datei bereithält, und diese dann per objectstream verschicken... aber einlesen musst du das teil immernoch selber.
 

Lundner

Mitglied
ja ne das is schon klar - das hab ich jetzt nur symbolisch hingeschrieben mit file ! ;-)

kannst du mir nen tipp geben, wie ich die datei in ein byte-array packen kann?! mit inputstream etc ging es ja nicht weil das nich serialisierbar ist
 

Lundner

Mitglied
Das mit den byte-arrays ging genau in die richtige richtung - DANKE!!
hier mal meine klasse:
Code:
package Packages;

import java.io.File;
import java.io.IOException;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.*;
import java.io.FileOutputStream;

public class ByteData implements Serializable {
	
	public String filePath;
	public String newName;
	byte[] fileBytes;
	
	
	public ByteData(File f){
		loadData(f.getAbsolutePath());
		newName = f.getName();
	}
	
	public void saveData(String path){
		File file = new File(path);
		try {
			DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
			//System.out.println(fileBytes.length);
			for(int i=0;i<fileBytes.length;i++){
				dos.write(fileBytes[i]);
			}
			dos.flush();
			dos.close();
		} catch(IOException e){
			System.out.println("Speicher-Fehler: "+e);
		}
	}
	
	public void loadData(String path){
		File file = new File(path);
		try {
		DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
                fileBytes = new byte[(int) file.length( )];
                fis.readFully(fileBytes);
                fis.close();
                System.out.println(fileBytes.length);
		} catch(IOException e){
			System.out.println("Lade-Fehler: "+e);

		}		
	}
}

edit: ich find den button nicht um diesen Thread als gelöst zu markieren *sry*
 

NTB

Bekanntes Mitglied
Ich hatte an richtige ByteArrayInput und Outout gedacht. So ist doch aber auch schnieke. Schön, dass Du Deine Lösung gepostet hast. Hab ich mir auch gleich gespeichert... wer weiss, wozu man das noch braucht :)
Unten links kannst Du den Fred abharken...
 

m@nu

Bekanntes Mitglied
genau sowas habe ich gemeint :)

aus reinem interesse: wie geht die performance so? wenn ich eine datei per netzwerk verschickt hab', dann habe ich das ohne denn umweg über ein byte array gemacht.

ps. das häckchen zum "solved"-flag is ganz unten links von deinem thread :)
 

Lundner

Mitglied
habs bis jetzt nur über meinen localhost gejagt. da gings zügig ;-)

ich glaub ich kann den thread nicht als solved markieren weil ich ja ausversehen als gast den thread eröffnet habe..

und danke nochmal!!

edit: das ganze klappt aber nur mit kleinen dateien, bei grösseren gibt es nen stackerror - relativ logisch, weil das array ja auch dementsprechend gross wird...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Datei schreiben über Applet Netzwerkprogrammierung 8
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
M Socket Datei über Socket versenden Netzwerkprogrammierung 5
L Java über php datei lesen? Netzwerkprogrammierung 18
weeego Ping über CMD, Umweg über Batch Datei sparen. Netzwerkprogrammierung 17
O Mehrere Datei per DataInput/OutputStream über Socket Netzwerkprogrammierung 12
S über rmi datei übertragen? Netzwerkprogrammierung 2
J Zeilenweises auslesen aus einer Datei über Server Netzwerkprogrammierung 6
A PDF über HTTP einlesen und in Datei schreiben Netzwerkprogrammierung 5
G Datei über HTTP Stream senden Netzwerkprogrammierung 4
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
J Datei Download vom Server Netzwerkprogrammierung 8
H Datei mit Anhang via http "hochladen" Netzwerkprogrammierung 16
E JCIFS - Smb - Datei kann nur von einem Benutzer bearbeitet werden Netzwerkprogrammierung 1
Aruetiise Socket Datei Endung Netzwerkprogrammierung 6
A FTP wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben? Netzwerkprogrammierung 3
K HTTP Formulare füllen und Datei downloaden Netzwerkprogrammierung 23
B JSch Filetransfer ohne KnownHosts Datei? Netzwerkprogrammierung 0
A Datei erzeugen und auf der Weboberfläche downloaden (Tomcat) Netzwerkprogrammierung 4
Sogomn HTTP Datei herunterladen Netzwerkprogrammierung 13
C Inhalt einer .JPG Datei in einen OutputStream schreiben? Netzwerkprogrammierung 10
F FTP FTPClient Datei lässt sich nicht öffnen Netzwerkprogrammierung 4
F HTTP Serialisierte Objekte aus Datei von Server Netzwerkprogrammierung 1
T Anwendungseinstellungen ohne Datei übertragen? Netzwerkprogrammierung 8
F FTP Einzelne Datei von FTP-Server überprüfen Netzwerkprogrammierung 0
L FTP Lesen einer Datei vom Server - Aufgehangen Netzwerkprogrammierung 0
M jsf-seite beim hinzufügen einer csv-datei in einen ordner aktualiseren Netzwerkprogrammierung 0
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
S Datei(XML) per RMI an Server schicken Netzwerkprogrammierung 0
V Datei Download Fenster Netzwerkprogrammierung 9
C Socket Datei Übertragung Netzwerkprogrammierung 5
D Datei hochladen zu PHP Server Netzwerkprogrammierung 8
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
T Datei downloaden ohne den Dateinamen zu kennen Netzwerkprogrammierung 2
H Datei in DropBox schreiben Netzwerkprogrammierung 23
V Datei auf Server Schreiben Netzwerkprogrammierung 18
N Einen Server als ausführbare Datei exportieren Netzwerkprogrammierung 15
B FTP Datei auslesen ohne einloggen möglich? Netzwerkprogrammierung 19
C Datei auf server speichern Netzwerkprogrammierung 16
P FTP Nochmal wachsende Datei per FTP lesen Netzwerkprogrammierung 9
W Datei automatisiert kopieren! Netzwerkprogrammierung 5
P Wachsende Datei per FTP lesen Netzwerkprogrammierung 2
S Servlet - Datei kann nicht gelöscht werden Netzwerkprogrammierung 12
G Txt datei von Website downloaden Netzwerkprogrammierung 8
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
I HTTP Datei Uploaden mit http und Sprache anpassen Netzwerkprogrammierung 7
1 Datei senden/empfangen funzt nicht... Netzwerkprogrammierung 5
S ActiveMQ, JMS und Datei übertragen Netzwerkprogrammierung 25
U Web Datei downloaden und bei Änderungen wieder zurückspielen Netzwerkprogrammierung 5
M Class-Datei aus Eclipse mit Xampp Netzwerkprogrammierung 4
A HTTP Download einer Datei mit "Statistiken" Netzwerkprogrammierung 2
B Zugriff auf eine Text- und XML-Datei Netzwerkprogrammierung 4
Dit_ FTP, Datei Hochladen Netzwerkprogrammierung 4
Ollek Download einer Datei durch SFTP mit Java Netzwerkprogrammierung 12
J Datei übertragen ja String + datei übertragen nein Netzwerkprogrammierung 5
P Name der Download-Datei ermitteln Netzwerkprogrammierung 8
N Socket TCP Datei Transfer Netzwerkprogrammierung 2
P Socket Datei von Client zum Server übertragen --> Weiterleitung an Clients Netzwerkprogrammierung 16
Akrillo Datei per Netzwerk senden Netzwerkprogrammierung 10
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
L Größe einer Datei auslesen die im Netz liegt Netzwerkprogrammierung 4
R Versenden einer MIME-Datei per E-Mail [solved] Netzwerkprogrammierung 5
S StringArray in .txt Datei --> langsam wegen Client/Server!? Netzwerkprogrammierung 16
S Bild-Datei von Servlet an Browser senden Netzwerkprogrammierung 8
U Datei via UDP Netzwerkprogrammierung 8
C Dateigröße einer Datei im Internet ermitteln Netzwerkprogrammierung 2
S Error 404 obwohl die Datei existiert Netzwerkprogrammierung 9
T Datei Herunterladen und ausführen Netzwerkprogrammierung 5
S Mittels Java XML abfragen und nicht die Ausgabe-HTML-Datei Netzwerkprogrammierung 5
C PCAP Datei auslesen Netzwerkprogrammierung 8
F Applet Datei Zugriff Netzwerkprogrammierung 13
G Datei performant im Netzwerk verschieben Netzwerkprogrammierung 4
M [Commons NET] Prüfen, ob auf FTP Datei vorhanden ist Netzwerkprogrammierung 2
Rontu Problem beim Übertragen einer Datei Netzwerkprogrammierung 9
E Größe der Datei vor Download ermitteln Netzwerkprogrammierung 3
C Dateiübertragung - Datei immer ein 4096faches von n Netzwerkprogrammierung 2
E Applet zum Datei-Upload Netzwerkprogrammierung 3
A FileChannel+SocketChannel:Datei wird nur teilweise übertrage Netzwerkprogrammierung 4
J Gibts die Datei? Netzwerkprogrammierung 3
K Datei-Upload per FTP Netzwerkprogrammierung 2
G Fehlermeldung beim Erzeugen der WSDL Datei unter Axis Netzwerkprogrammierung 2
G.I.Joe Datei per POST übertragen Netzwerkprogrammierung 2
B Umfangreiche Batch Datei (Rmiregistry prüfung + Prog. start) Netzwerkprogrammierung 4
V Einen Eintrag aus einer Zip Datei von einem Server laden Netzwerkprogrammierung 2
M Datei auf einem Server ausführen Netzwerkprogrammierung 4
N Dateigröße einer Datei auf einem HTTP-/Web-Server. Netzwerkprogrammierung 9
W fehlerhafte Datei nach Dateitransfer per ServletOutputStream Netzwerkprogrammierung 2
F Datei senden und empfangen Netzwerkprogrammierung 4
B Via Java Datei zu PHP-Script auf Apache hochladen Netzwerkprogrammierung 4
B knacken bei download von mp3 datei Netzwerkprogrammierung 2
T Datei senden Netzwerkprogrammierung 3
M Datei auf Remoteserver kopieren Netzwerkprogrammierung 8
B Datei speichern unter Netzwerkprogrammierung 10
B Laden einer *.csv Datei von einem Webserver (http-request) Netzwerkprogrammierung 8
R In Text Datei schreiben die auf einem Server liegt Netzwerkprogrammierung 8
S Unix Datei vom Server nach Windows übertragen Netzwerkprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben