2011-10-27 14 views
5

Sto utilizzando una libreria Java appropriata che salva i dati direttamente in un java.io.File, ma devo essere in grado di leggere i dati in modo che siano direttamente in streaming. I dati sono binari, alcuni file multimediali.Lettura dei dati da un file mentre è in fase di scrittura su

Il java.io.File viene passato come argomento a questa libreria, ma non conosco un modo per ottenere un flusso da esso. C'è un modo semplice per farlo, tranne aprire il file anche per leggere e provare a sincronizzare le operazioni di lettura/scrittura !?

Preferibilmente saltare la scrittura sulla parte del file system poiché sto utilizzando questo da un'applet e in questo caso sono necessarie autorizzazioni aggiuntive.

+1

Se si potesse passare un OutputStream invece, sarebbe più facile. È un'opzione? – laher

risposta

4

Se una parte del programma sta scrivendo su un file, quindi dovresti essere in grado di leggere da quel file utilizzando un normale flusso new FileInputStream(someFile) in un altro thread, sebbene ciò dipenda dal supporto del sistema operativo per tale azione. Non è necessario sincronizzare nulla. Ora sei alla mercé del flusso di output e quanto spesso la parte di scrittura del tuo programma chiama flush() quindi potrebbe esserci un ritardo.

Ecco uno little test program che ho scritto dimostrando che funziona correttamente. La sezione di lettura è appena in un ciclo assomiglia a qualcosa:

FileInputStream input = new FileInputStream(file); 
while (!Thread.currentThread().isInterrupted()) { 
    byte[] bytes = new byte[1024]; 
    int readN = input.read(bytes); 
    if (readN > 0) { 
     byte[] sub = ArrayUtils.subarray(bytes, 0, readN); 
     System.out.print("Read: " + Arrays.toString(sub) + "\n"); 
    } 
    Thread.sleep(100); 
} 
+0

grazie, è stato davvero così facile – user1015922

+2

Dipende dal sistema operativo. Alcuni non ti permetteranno di scrivere su un file che viene letto ... altri hanno tutti i tipi di problemi o richiedono speciali modalità di "condivisione" per farlo. Windows in particolare sembra odiarlo. – cHao

+0

Quindi, in Windows, nella stessa applicazione non è possibile leggere i propri file senza alcune modalità di "condivisione"? Non lo sapevo. – Gray

0

presupponendo che il comportamento di scrittura dei file sia intrinseco alla libreria, è necessario controllare la relativa documentazione per vedere se è possibile evitare di scrivere sul file system. In generale, se si desidera leggere un file in fase di scrittura (vale a dire * nix comportamento di coda), è possibile utilizzare java.io.RandomAccessFile

+0

sì doppio controllo della documentazione – user1015922

+0

Guarderò RandomAccessFile, 10x – user1015922

Problemi correlati