2009-04-02 18 views
7

Voglio solo sapere se c'è un tutorial o un how-to per serializzare oggetti, metterli in uno stream sulla rete e deserializzare dall'altra parte. Capisco i principi di serializzazione, I/O, stream, socket e così via, vorrei solo un esempio di un client che invia un oggetto a un server per iniziare.Serializzazione Java sulla rete

risposta

9

This (pdf) è un utile tutorial che illustra le basi della serializzazione e dei socket, quindi collega i due concetti insieme (circa a metà delle diapositive) per mostrare come serializzare un oggetto e inviarlo dal client a server (senza RMI). Penso che sia esattamente quello che vuoi.

+0

Mostra davvero come utilizzare le prese di serializzazione e, grazie! – elbaid

7

È piuttosto semplice, in realtà. È sufficiente rendere serializzabili gli oggetti e creare ObjectOutputStream e ObjectInputStream collegati a qualsiasi flusso sottostante, ad esempio FileInputStream, ecc. Quindi, basta scrivere() qualunque oggetto si desideri allo stream e leggerlo sull'altro lato.

Ecco un example per voi.

+1

si potrebbe desiderare di essere un po 'più attenti sulla chiusura delle tue risorse rispetto a quell'esempio. –

5

Java fornisce la serializzazione oggetto (binaria) utilizzando ObjectOutputStream (e ObjectInputStream). Puoi semplicemente scrivereObject() nello stream e readObject() sull'altra estremità. Tutto ciò che devi fare per funzionare è implementare l'interfaccia Serializable.

Ma piuttosto che farlo manualmente, potresti essere interessato a portarlo a un livello e usare Remote Method Invocation. Con RMI puoi chiamare metodi su oggetti che vivono in un'altra JVM, e tutta la serializzazione e il networking avvengono sotto il cofano.

E per completezza, c'è anche XML bean serialization, se non è possibile utilizzare il formato binario. Quel formato XML è molto generico (leggi: verbose e brutto), ma ci sono alcune librerie popolari (come XStream) che creano serializzazioni XML alternative.

+0

XStream offre anche la serializzazione JSON (con Jettison) che può essere molto utile nei progetti cross-language: www.json.org – mjn

+0

Mai sentito parlare di RMI, sembra WCF nella tecnologia Microsoft, spero di non sbagliare ... Grazie per l'idea! – elbaid

2

è possibile creare flussi di oggetti utilizzando java api e inviare qualsiasi oggetto serializzabile. ma youll devono ricordare che questi vanno in chiaro attraverso la rete:

sul lato del mittente:

CustomObject objectToSend=new CustomObject(); 
Socket s = new Socket("yourhostname", 1234); 
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream()); 
out.writeObject(objectToSend); 
out.flush(); 

e sul lato di ricezione:

ServerSocket server = new ServerSocket(1234); 
Socket s = server.accept(); 
ObjectInputStream in = new ObjectInputStream(s.getInputStream()); 
CustomObject objectReceived = (CustomObject) in.readObject();