Pregunta

Quiero obtener una transmisión de alguna posición arbitraria en un archivo existente, por ejemplo, necesito leer/escribir desde/a un archivo que comienza con 101th byte. ¿Es seguro usar algo así?

final FileInputStream fin = new FileInputStream(f);
fin.skip(100);

Omitir javadoc dice que a veces puede omitir un menor número de bytes de lo especificado. ¿Que debería hacer entonces?

¿Fue útil?

Solución

¿Qué tal lo siguiente?

final RandomAccessFile raf = new RandomAccessFile(f, mode);
raf.seek(100);
final FileInputStream fin = new FileInputStream(raf.getFD());
// read from fin

Otros consejos

No puede escribir usando un FileInputStream. Debe usar un randomaccessfile si desea escribir en ubicaciones arbitrarias en un archivo. Desafortunadamente, no hay una manera fácil de usar un archivo randomAccess como un inputstream/outputStream (Parece que @Aix puede tener una buena sugerencia para adaptar RandomAccessFile a InputStream/OutputStream), pero hay varios adaptadores de ejemplo disponibles en línea.

Otra alternativa es usar un filechanal. Puede establecer la posición del fileChannel directamente, luego usar los métodos de utilidad de canales para obtener adaptadores InputStream/OutpleStream en la parte superior del canal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top