Foros del Web » Programación para mayores de 30 ;) » Java »

otra pregunta sobre serializacion

Estas en el tema de otra pregunta sobre serializacion en el foro de Java en Foros del Web. Bueno,quizas esta es mas sobre archivos. Ya he conseguido serializar lo que queria,de una forma un poco chapucera pero bueno ya me apaño. Ahora mi ...
  #1 (permalink)  
Antiguo 14/05/2007, 08:39
 
Fecha de Ingreso: febrero-2007
Mensajes: 172
Antigüedad: 17 años, 2 meses
Puntos: 0
otra pregunta sobre serializacion

Bueno,quizas esta es mas sobre archivos.
Ya he conseguido serializar lo que queria,de una forma un poco chapucera pero bueno ya me apaño.
Ahora mi pregunta es como puedo ir leyendo uno por uno los objetos que he ido metiendo en el archivo para poder tratarlos.

NovaTasca nt2;
nt2=(NovaTasca) in.readObject();
Esto es lo que hago para leer y obviamente me devuelve el primero.He probado a hacerlo con un bucle for,ya que se en todo momento cuantos elementos tengo que leer,pero con el bucle for solo me devuelve el primero repetido el numero de veces que sea
  #2 (permalink)  
Antiguo 14/05/2007, 15:13
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: otra pregunta sobre serializacion

Hola:

Si has escrito con un ObjectOutputStream, hay un pequeño problema que quizás haga que escribas muchas veces el mismo objeto, aunque en el código estás escribiendo distintos.

Si escribes así

Código:
Dato dato = new Dato();
bucle
   dato.setAtributos (atributos);
   objectOutputStream.write(dato);
fin bucle
puesto que siempre es la misma instancia de Dato (solo hay un new), ObjectOutputStream es demasiado listo, ve que es la misma instancia y escribe los mismos bytes que en la primera llamada, sin verificar si ha habido cambios o no dentro de la instancia.

Una solucion es hacer un new cada vez

Código:
bucle
   Dato dato = new Dato();
   dato.setAtributos (atributos);
   objectOutputStream.write(dato);
fin bucle
Aquí pudes ver más detalles sobre este problema con ObjectOutputStream y alguna posible solución más.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 15/05/2007, 15:39
 
Fecha de Ingreso: febrero-2007
Mensajes: 172
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: otra pregunta sobre serializacion

Ante todo muchas gracias por ir respondiendo
Ahora el problema lo tengo en que lo lee todo correctamente pero al final peta
NovaTasca t;
t=(NovaTasca) in3.readObject();
while(t!=null)
{
if(t.p==null)
{
System.out.println(t.Id+t.Nom);
t=(NovaTasca) in3.readObject();
}
else
{
System.out.println(t.Id+t.Nom+"("+t.p+")");
t=(NovaTasca) in3.readObject();
}

}
y peta siempre en esta linea t=(NovaTasca) in3.readObject();
cuando llega al final,cuando ya ha leido todo.Supongo que porque en ese momento t cogera de valor null y sale del bucle.Como puedo hacer que no me pete el programa en ese momento?que condicion hay que poner para que pueda seguir trabajando?
Se que son preguntas muy asi,pero es que no tengo ni idea de java y es lo que me estan pidiendo en la universidad,pero tampoco te enseñana como va,solo te remiten a libros y demas.Lo hice con un while porque es la manera que encontre para hacerlo....
  #4 (permalink)  
Antiguo 15/05/2007, 15:55
 
Fecha de Ingreso: febrero-2007
Mensajes: 172
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: otra pregunta sobre serializacion

Vale,ya esta,ya lo hice,con un try y catch
Tengo unos pocos por ahi puestos y no cai en usarlo jejeejjeje
  #5 (permalink)  
Antiguo 15/05/2007, 23:28
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: otra pregunta sobre serializacion

Un try/catch no tendría que hacer falta si compruebas bien las condiciones de finalización del bucle y los valores leidos.
Igualmente el bucle que muestras podría escribirse así:
Código:
NovaTasca t;
while((t=(NovaTasca) in3.readObject())!=null)
{
 if(t.p==null)
 {
  System.out.println(t.Id+t.Nom);
 }
 else
 {
  System.out.println(t.Id+t.Nom+"("+t.p+")");
 }
}
Aparte de eso, una solución sencilla si siempre has de leer todos los objetos es meterlos todos en un objeto List, al escribirlos, y al leerlos solo has de leer un objeto, de clase List, y luego puedes leerlos como cualquier lista con un Iterator, por ejemplo.

Y no olvides cerrar los streams apropiadamente .

S!

PD: EL problema que te da sin el try/catch no se cual es, ya que "peta" no es pista suficiente .
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:19.