View Single Post
Old 11-03-2011, 23:40   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Eh già, tu dici all'ftp channel dove scaricare e lui scarica. Allora vai di pipe. Puoi leggere quello che l'ftp client scarica su un OutputStream che gli rifili tu, usando un BufferedReader in lettura con 'sta Pipe. Una Pipe è un'affare che connette un flusso di scrittura ad uno di lettura e viceversa. Ad esempio:

Pipe pipe = Pipe.open();
SourceChannel inputChannel = pipe.source();
SkinChannel outputChannel = pipe.skin();

Qui quello che scrivi su outputChannel è leggibile tramite inputChannel. Il client vuole un output stream, quindi trasformi outputChannel in un OutputStream:

Pipe pipe = Pipe.open();
SourceChannel inputChannel = pipe.source();
SkinChannel outputChannel = pipe.skin();
OutputStream outputStream = Channels.newOutputStream(outputChannel);

Questo outputStream è quello che passi all'ftp client. Per leggere quello che arriva all'inputChannel con un BufferedReader fai una trasformazione di questo tipo:

Pipe pipe = Pipe.open();
SourceChannel inputChannel = pipe.source();
SkinChannel outputChannel = pipe.skin();
OutputStream outputStream = Channels.newOutputStream(outputChannel);
InputStream inputStream = Channels.newInputStream(inputChannel);
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(inputStreamReader);

E questa è la connessione di base. A questo punto devi invocare il metodo download ma c'è un problema: è bloccante. Cioè se io dico:

client.download(nome_file, outputStream, boh);

il client non molla la linea finchè non ha terminato di scrivere e non hai modo di leggere alcunchè. A seconda di cosa vuoi fare può darsi che tu debba far partire il metodo download in un thread a parte o scaricare il reader da un thread a parte. Probabilmente la prima, cioè dirai:

Codice:
new Thread() { public void run() {
    client.download(nome_file, outputStream, boh);
}}.start();
Così puoi scrivere subito dopo, in ipotesi:

while(reader.hasNextLine()) { pippo }

e avrai i tuoi byte.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso