Java - Ayuda con la Serializacion

 
Vista:
sin imagen de perfil

Ayuda con la Serializacion

Publicado por Edgar Ricardo (5 intervenciones) el 03/03/2014 21:28:41
El problemas es este: Serializo un objeto, y lo introduzco a un archivo sin problemas,
luego realizo una modificación al estado del objeto original y lo vuelvo a serializar e
introducir al archivo. Yo esperaría tener dos objetos en el archivo uno con el estado
antiguo y otro con el estado actualizado.... Pero, al tratar de recuperar los objetos me
doy cuenta que en efecto se han guardado dos objetos pero con el mismo estado,
el primero haciendo caso omiso a la última actualización del estado....

Eso tiene sentido???

El código es este

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.io.*;
 
public class ObjectInputStreamDemo
implements java.io.Serializable{
 
   String nom ;
 
   public ObjectInputStreamDemo( String s){
       nom = s ;
   }
 
   public static void main(String[] args) {
 
      ObjectInputStreamDemo a, b ;
      a = new ObjectInputStreamDemo("Edgar") ;
 
 
     try {
 
 
         FileOutputStream out = new FileOutputStream("test.bin");
         ObjectOutputStream oout = new ObjectOutputStream(out);
 
         //guardo el objeto a
         oout.writeObject(a);
         oout.flush();
 
         //realizo una actualización del estado
         a.nom = "Perdomo";
         oout.writeObject(a);
 
         ObjectInputStream ois =
            new ObjectInputStream(new FileInputStream("test.bin"));
 
 
         b = (ObjectInputStreamDemo)ois.readObject() ;
         System.out.println(b.nom);
         b = (ObjectInputStreamDemo)ois.readObject() ;
         System.out.println(b.nom);
 
      } catch (Exception ex) {
         ex.printStackTrace();
      }
 
   }
}

Al correrlo esperaría una salida
Edgar
Perdomo
pero obtengo
Edgar
Edgar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda con la Serializacion

Publicado por alvaro (17 intervenciones) el 04/03/2014 00:57:05
despues del nombre de tu fichero pon true;
quedaria de la siguiente forma ("test.bin",true)

esto lo que hace es escribir a partir de la ultima linea de codigo escrita sin machacar los datos anteriores, de todas formas no se si esto solucionara tu problema porque no e probado tu codigo, pero seguro que este es uno de los problemas porque machacas los datos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con la Serializacion

Publicado por Edgar Ricardo (5 intervenciones) el 04/03/2014 20:16:09
Gracias por tu respuesta...
sería lo que pasara si escribiera en el archivo, luego lo cerrara (cosa que no hago)
y luego vuelvo a escribir el objeto.... de hecho, solo habría un objeto en el
archivo y tendría el último estado... la cosa es que, guardo dos veces el mismo
objeto en el archivo, en la segunda de las cuales el objeto ha sufrido una
modificación en el estado... en mi lógica (es la primera experiencia con la
serialización de objetos), debería tener dos objetos de la misma clase con
diferentes estados.... Pero lo que tengo es DOS objetos con el MISMO estado
como si ignorara la variación del estado hecha antes de guarda en una segunda
ocasión.

No entiendo!!!!... Es como si solo se pudieran guardar objetos diferentes
de la misma clase pero diferentes, porque si guardo dos veces el MISMO objeto
siempre se guarda con el primero de los estados que lo almacené... no entiendo!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con la Serializacion

Publicado por Edgar Ricardo (5 intervenciones) el 05/03/2014 01:01:57
Pues fijate... que si se puede simplificar un poco... al menos para el caso
de datos simples como int...
fijate en el campo x... esto es un ejemplo que encontre en esta dirección
http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/clonico/clonico2.htm

public class Lista implements Cloneable{
private int[] x;
public int n;
public String nombre;
//...
}


public Object clone(){
Lista obj=null;
try{
obj=(Lista)super.clone();
}catch(CloneNotSupportedException ex){
System.out.println(" no se puede duplicar");
}
obj.x=(int[])obj.x.clone();
return obj;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar