PDA

View Full Version : [Java-RMI] Messaggi


nucarote
29-05-2007, 15:14
Avendo un servizio implementato in RMI del tipo:

public void createFile(String fileName, byte[] data)throws RemoteException.

public byte[] getFile(String fileName)throws RemoteException.

E' possibile sapere il numero di elementi dell'array byte di ritorno scaricati in un determinante istante?

lovaz
29-05-2007, 16:48
Così?

byte[] arr = getFile(...
int n = arr.length;

nucarote
29-05-2007, 18:42
Così?

byte[] arr = getFile(...
int n = arr.length;

No, durante il procedimento di chiamata del metodo.
Un pò come leggere dallo stream di URLConnection tanto per intenderci.

cionci
29-05-2007, 19:10
Credo proprio di no...perché tutto quello che avviene durante la chiamata, al di sotto del proxy object, è totalmente trasparente all'utente...

lovaz
30-05-2007, 09:08
Comunque ti consiglierei di spezzare il file da spedire in pezzettini, cosi'
hai una idea di "quanto manca".

Oppure implementi un oggetto che incapsula un file e lo
serializzi custom.

O ancora reimplementi le socket factory, cosi' hai il controllo a basso
livello su quello che passa per la rete.

tomasi81
30-05-2007, 10:45
Comunque ti consiglierei di spezzare il file da spedire in pezzettini, cosi'
hai una idea di "quanto manca".

Oppure implementi un oggetto che incapsula un file e lo
serializzi custom.



Premettendo che non ne capisco molto di RMI avendone solo letto qualcosa su un manuale mi spiegheresti come spezzare il file da spedire? C'è un modo per farlo in automatico all'interno dell'applicazione (intendo qualcosa come un metodo di qualche classe Java che prende in pasto il file e restituisce un array contenente il file suddiviso in "segmenti" della stessa lunghezza o cose così).

E se puoi cosa intendi per incapsulare il file e serializzarlo custom (la serializzazione la conosco è il "custom" che non avevo mai sentito prima).

lovaz
30-05-2007, 11:20
... mi spiegheresti come spezzare il file da spedire? C'è un modo per farlo in automatico...
Non c'e' un modo automatico, per quanto ne so, lo puoi fare semplicemente
con array, leggendo un pezzetto alla volta...
In questo modo pero' perdi i vantaggi di RMI.
E se puoi cosa intendi per incapsulare il file e serializzarlo custom (la serializzazione la conosco è il "custom" che non avevo mai sentito prima).
Devi implementare i due metodi
private void writeObject(ObjectOutputStream s)
private void readObject(ObjectInputStream s)
In questo modo e' tua responsabilita' salvare e ripristinare il tuo oggetto.

Vedi un esempio qui:

http://java.sun.com/javase/6/docs/technotes/guides/serialization/examples/custom/index3.html

nucarote
30-05-2007, 11:22
Comunque ti consiglierei di spezzare il file da spedire in pezzettini, cosi'
hai una idea di "quanto manca".

Oppure implementi un oggetto che incapsula un file e lo
serializzi custom.

O ancora reimplementi le socket factory, cosi' hai il controllo a basso
livello su quello che passa per la rete.

La prima è la più semplice e non mi farebbe sbattere troppo.
La seconda non l'ho capita.
La terza mi pare leggermente più complessa se ho tempo ci provo.

tomasi81
30-05-2007, 11:31
Grazie mille lovaz! :)