Java Open Stream desde una ubicación arbitraria en el archivo
-
26-10-2019 - |
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?
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.