|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
|
[JAVA] Inviare file di un oggetto serializzato da server a client
Salve a tutti,
innanzitutto grazie a quanti risponderanno, veniamo al problema: applicazione client-server, il server serializza un oggetto con il seguente metodo: Codice:
public void sendFile(ObjectOutputStream out) throws FileNotFoundException, IOException{
OutputStream outStream = new BufferedOutputStream( out );
// Definisco l'OutputStream necessario per la serializzazione dell'oggetto (ObjectOutputStream)
ObjectOutputStream objStream = new ObjectOutputStream( outStream );
objStream.writeObject(this); // serializzazione
outStream.close(); // chiudo lo stream (necessario per gestire la bufferizzazione)
}
Quello che voglio fare è scrivere l'oggetto serializzato su file sul client quindi cosa faccio: Codice:
OutputStream outFile=new FileOutputStream("prova.dat");
byte buf[] = new byte[1024];
int len;
while((len = in.read(buf))>0)
outFile.write(buf, 0, len);
outFile.close();
p.s. se c'è una maniera meno grezza di trasferire questo benedetto file di un oggetto serializzato ben venga
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Perchè fare tutto questo giro di stream: sul server hai il riferimento all' ObjectOutputstream che wrappa lo stream di connessione, bene utilizza quello per spedire l' oggetto. Lato client, fai l' operazione inversa, sparando l' input ricevuto dal socket, attraverso un ObjectOutputstream linkato ad un filestream, su file.
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
|
per quanto riguarda lato server perfetto hai assolutamente ragione chiudo così:
Codice:
public void sendFile(ObjectOutputStream out) throws FileNotFoundException, IOException{
ObjectOutputStream auxOut = new ObjectOutputStream(out);
auxOut.writeObject(this);
auxOut.close();
}
edit: se intendi: Codice:
OutputStream outFile=new FileOutputStream(fs.getSelectedFile().getAbsolutePath() + ".dat");
ObjectOutputStream prova = new ObjectOutputStream(outFile);
try {
prova.writeObject(in.readObject());
}
catch (ClassNotFoundException ex) {
System.out.println("AAAAA");
}
Grazie mille
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum Ultima modifica di cdere : 04-07-2010 alle 00:23. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Se parli di oggetti, devi avere la loro definizione ovvero la classe, altrimenti stai spedendo un flusso di byte senza significato lato client. Puoi farne uno storage, ma difficilmente li sfrutterai a livello applicativo se non definisci un tuo protocollo, ma a questo punto ha poco senso far transitare oggetti nudi e puri. Altrimenti importa la classe anche sul client e utilizzi il metodo di cui sopra.
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
|
a me infatti serve un flusso di byte nudi e puri da far arrivare al client per permettergli di salvare questo flusso su un file binario
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
come già detto li puoi anche scrivere su file con il tuo metodo, ma dopo non puoi fartee nulla, soprattutto deserializzarli.
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
|
va bene ma non mi serve deserializzarli..
comunque il mio metodo in realtà funziona, è solo che quando poi dalla parte del server chiudo quell' ObjectOutputStream (se non lo chiudo non funziona) poi come lo riapro?
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Jun 2009
Messaggi: 38
|
hai provato ad utilizzare al posto di un .close() un .flush() per svuotare il buffer? se il trasferimento avviene ad esempio tramite socket (molto utile anche in locale) credo sia al massimo quest'ultimo che dev'essere chiuso quando non serve più, non lo stream
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:48.



















