Java flusso aperto da una posizione arbitraria nel file di
-
26-10-2019 - |
Domanda
Voglio ottenere un flusso da qualche posizione arbitraria in un file esistente, ad esempio ho bisogno di leggere / scrivere da / a un file che inizia con byte 101th. E 'sicuro da usare qualcosa di simile?
final FileInputStream fin = new FileInputStream(f);
fin.skip(100);
Skip javadoc dice che talvolta può ignorare minor numero di byte quella specificata. Che cosa devo fare allora?
Soluzione
Come circa la seguente:
final RandomAccessFile raf = new RandomAccessFile(f, mode);
raf.seek(100);
final FileInputStream fin = new FileInputStream(raf.getFD());
// read from fin
Altri suggerimenti
Non è possibile scrivere utilizzando un FileInputStream. è necessario utilizzare un RandomAccessFile se si vuole scrivere in posizioni arbitrarie in un file. eunfortunately, non v'è alcun modo semplice per utilizzare un RandomAccessFile come un InputStream / OutputStream (sembra @aix può avere un buon suggerimento per adattarsi a RandomAccessFile InputStream / OutputStream), ma ci sono vari adattatori esempio disponibili on-line .
Un'altra alternativa è quella di utilizzare un FileChannel. è possibile impostare la posizione del FileChannel direttamente, quindi utilizzare i metodi di utilità canali per ottenere InputStream / OutputStream adattatori sulla parte superiore del canale.