Tengo un fichero binario con formato little-endian. En una posición
determinada de dicho fichero se encuentran 34 bytes que representan
una cadena de caracteres en UTF-8 que quiero reemplazar por otra.
He conseguido leer los datos del fichero usando un ByteBuffer y
conozco el lugar donde tengo que reemplazar los bytes del fichero para
escribir la nueva cadena. Mi problema es que este es prácticamente mi
primer programa en JAVA y ando bastante perdido.
El fichero lo abro para lectura así:
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
FileChannel fic = fis.getChannel();
MappedByteBuffer bb = fic.map(FileChannel.MapMode.READ_ONLY, 0,
file.length());
bb.order(ByteOrder.LITTLE_ENDIAN);
Y puedo leer los valores del buffer así:
fileFingerprint = bb.getShort();
He probado a abrir el fichero para leer y escribir de esta forma:
RandomAccessFile file = new RandomAccessFile(fileName);
FileChannel fc = file.getChannel();
MappedByteBuffer = fc.map(FileChannel.MapMode.READ_WRITE, 0,
file.length());
Pero no se como reemplazar los valores almacenados en el buffer, pues
si intento hacer un put en la posición donde comienza la cadena que
quiero sustituir, me salta una excepción diciendo que el buffer no
tiene espacio libre. Supongo que le put no reemplaza los valores, sino
que intenta añadir más bytes al buffer. Pero no encuentro ningún
método que me permita reemplazar los bytes del buffer.
¿Sabéis alguna forma de hacerlo?
Gracias
La excepción que me estaba saltando no era por el MappedByteBuffer.
Estaba intentando escribir un array de bytes y estaba accediendo a un
elemento del array que no existía.
Con el código de antes y el método put, los cambios que hago en el
buffer, se reflejan en el fichero.
Saludos