Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/12/2015, 04:45
Avatar de chuidiang
chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: RandomAccessFile no se como leer bien los datos

Hola:

Es muy complejo lo que pretendes.

ObjectInputStream y ObjectOutputStream escriben/leen convierten la clase departamento a bytes de una forma no evidente. Según como escribas, escriben bytes de cabecera en el fichero, bien una cabecera al principio del fichero, bien una cabecera delante de cada objeto. Luego escriben la clase serializada a bytes de una forma extraña, etc, etc.

RandomAccessFile está pensado para ir directamente a una posición (en bytes) del fichero y leer de ahí (o escribir). Así que para hacer "compatible" RandomAccessFile con ObjectStream, tendrías que saber exactamente cuántos bytes ocupa una clase serializada para poder acceder directamente a su posición en fichero, teniendo en cuenta también los bytes de cabecera que te digo que estarán ahí. Si además vas por campos, no solo debes saber en el fichero la posición exacta donde está tu clase, sino la posición exacta donde se guarda ese campo. Finalmente, RandomAccessFile, cuando escribes en una posición, "machaca" lo que hay en esa posición, no inserta ni recorta, por lo que tendrías que modificar el valor del campo por otro exactamente de la misma longitud.

Las opciones son tres.
1) Olvidate del RandomAccessFile. Directamente, cuando modifiques algo, sobreeescribe el fichero entero.
2) Piensa un formato de fichero que no sea ObjectStream y que tenga registros de longitud fija y campos de longitud fija. Con eso podrías usar RandomAccessFile.
3) Usa una base de datos. Si no quieres meterte en el lío de instalación de base de datos, las embebidas son una buena opción (HSQLDB, Apache Derby, ...)

Se bueno.
__________________
Apuntes Java
Wiki de Programación