elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Problema escritura objetos en archivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema escritura objetos en archivo  (Leído 3,748 veces)
panaka


Desconectado Desconectado

Mensajes: 513



Ver Perfil WWW
Problema escritura objetos en archivo
« en: 20 Febrero 2010, 15:40 pm »

Buenas, tengo un problema a la hora de escribir objetos en archivo, me explico, escribo una serie de objetos, para ello abro los stream y sus fileOutput correspondientes y todo bien, o eso parece, ya que al intentar leer del archivo solo me lee los que han sido escritos por el primero stream, cuando en el archivo si figuran los demas objetos, es como si la estructura del archivo al escribir el 2º stream se alterara para los sucesivos.

Os pongo un fragmento del codigo.
Código:
public class AdministracionElementos {
public static int numPeliculas = 0;

public static void main(String[] args){
Pelicula p1 = new Pelicula("Expediente XXXXXXXXX","Señor X",1000.0,"Cihhhhhencia-Ficcion");
Pelicula p2 = new Pelicula("Expediente X","Señor X",100.0,"Ciencia-Ficcion");
Pelicula p3 = new Pelicula("Avatar","Señor Y",222.0,"Ciencia-Ficcion");




try{
//Añadimos pelicula
añadirPeliculaArchivo(p2);
añadirPeliculaArchivo(p3);
//Leemos peliculas
//for(int i = 1;i <= numPeliculas;i++){
leerPeliculasArchivo();
//}

}catch(IOException excIO){
System.out.println("No se ha podido realizar la operacion de escritura");
}catch(ClassNotFoundException excNF){

}
}


public static void añadirPeliculaArchivo(Pelicula pelGrabar) throws IOException{
//Creo Stream de escritura
FileOutputStream fileOut = new FileOutputStream("datosPeliculas",true);
//Creo el escritor de objetos
ObjectOutputStream salidaObj = new ObjectOutputStream(fileOut);
salidaObj.writeObject(pelGrabar);

numPeliculas =numPeliculas + 1;

salidaObj.flush();
salidaObj.close();
fileOut.close();
}

public static void leerPeliculasArchivo() throws IOException, ClassNotFoundException{
Pelicula auxiliar;
//Extraccion de archivo
FileInputStream fileInp = new FileInputStream("datosPeliculas");
ObjectInputStream entradaObj = new ObjectInputStream(fileInp);
System.out.println(numPeliculas);
for(int i = 1;i <= numPeliculas;i++){
auxiliar = (Pelicula) entradaObj.readObject();
auxiliar.mostrarPelicula();
}



entradaObj.close();
fileInp.close();
}

Nota: lo del numero de peliculas deberia ir en otro archivo para mantener memoria pero aun "adaptandolo" para que funcione no va, este no es el error.
Todas las clases que lo necesitan implementan Serializable.

Saludos y gracias


En línea




Chuck Norris es tan friki tan friki que ve la televisión en el osciloscopio
Leyer


Desconectado Desconectado

Mensajes: 782


leyer@elhacker.net


Ver Perfil WWW
Re: Problema escritura objetos en archivo
« Respuesta #1 en: 20 Febrero 2010, 18:36 pm »

este problema es muy comun el asunto parece ser que cuando haces la segunda pasada para agregar este agrega datos "desconocidos" al archivo evitando asi la lectura correcta la forma de solucionarlo seria agregando todos los objetos que quieres agregar al archivo de una sola vez y asi se evitaria el error.

Un Saludo.


En línea

panaka


Desconectado Desconectado

Mensajes: 513



Ver Perfil WWW
Re: Problema escritura objetos en archivo
« Respuesta #2 en: 20 Febrero 2010, 18:41 pm »

Leyer ya improvise una solucion y tiene miga, me explico, la solucion que planteas aunque es valida es del todo inviable para grandes volumenes de datos por al carga que supone en la redundancia de informacion.

El problema venia en que al escribir por primera vez un stream tambien se escribe el header, he ahi la razon de porque erraba al intentar extraer el error del 2º stream, se toapaba con la cabecera y chascaba, solucion que no me convence pero es la unica que tengo ha sido meter mano a la zona protegida de ObjectInputStream para cargarme el metodo writeStreamHeader()  que me agrega la cabecera que escribe y asi no tener problemas, no es muy elegante pero funciona.

Saludos
En línea




Chuck Norris es tan friki tan friki que ve la televisión en el osciloscopio
Leyer


Desconectado Desconectado

Mensajes: 782


leyer@elhacker.net


Ver Perfil WWW
Re: Problema escritura objetos en archivo
« Respuesta #3 en: 20 Febrero 2010, 19:02 pm »

si es cierto! y Exapto por eso es el problema tu solucion me parece ser factible, es una forma de solucionar el problema  para grandes volumenes.

Saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines