# serialize deserialize java object über string



## noisebreath (19. Okt 2009)

Hi 

ich soll aus einem mir übergebenen String ein Objekt deserialisieren und dann wenn ich das objekt weitergebe wieder in einen String serialisieren.

pseudocode:

```
public void foo(String serializedObject){

MyObject a = deserialize(serializedObject);

a.foo2();

String serialized again = a.serialize();

}
```

kann mir jemand sagen wie das geht?

lg
noise


----------



## javimka (19. Okt 2009)

Bin mir nicht sicher, ob ich es recht verstanden habe. Also serialisieren tut man ein Objekt ja, damit man es auf die Festplatte speichern kann oder irgendwohin senden kann. Und deserialisieren muss man das Objekt, damit man es im Programm wieder verwenden kann.

Serialisieren:

```
OutputStream fos = null; 
 
try 
{ 
  fos = new FileOutputStream( filename ); 
  ObjectOutputStream o = new ObjectOutputStream( fos ); 
  o.writeObject(serializedObject); 
} 
catch ( IOException e ) { System.err.println( e ); } 
finally { try { fos.close(); } catch ( Exception e ) { } }
```

Deserialisieren:

```
InputStream fis = null; 
 
try 
{ 
  fis = new FileInputStream( filename ); 
  ObjectInputStream o = new ObjectInputStream( fis ); 
  String string = (String) o.readObject(); 
 
  System.out.println( string ); 
} 
catch ( IOException e ) { System.err.println( e ); } 
catch ( ClassNotFoundException e ) { System.err.println( e ); } 
finally { try { fis.close(); } catch ( Exception e ) { } }
```

Es grüsst
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 14.12 Persistente Objekte und Serialisierung


----------



## noisebreath (19. Okt 2009)

hm.. das heisst mit einem String kann ich das nicht einfach machen? müsste doch eigentlich auch gehen oder ?

lg
noise


----------



## javimka (19. Okt 2009)

doch, genauso kannst du es machen. Was funktioniert denn nicht?


----------



## noisebreath (19. Okt 2009)

so wie ich das verstanden hab krieg ich ein serialisiertes object als string übergeben. dann soll ich das deserialisieren was damit machen und wieder zu nem string serialisieren und zurückgeben. das hat doch nichts mit in ein file schreiben zu tun oder?


----------



## javimka (19. Okt 2009)

Da sehe ich leider keinen Sinn. Ein String ist kein serialisiertes Objekt, ausser man würde das selbst auf Teufel komm raus implementieren. Aber ein String Objekt ist serialisierbar, das heisst, man kann es in einen 0,1-Stream umwandeln.


----------



## Wildcard (19. Okt 2009)

Du kannst zB den XMLEncoder verwenden, oder wenn's standardserialisierung sein soll, dann ObjectOutputStream und dann zB Base64 Encoden damit du auch einen sinnvollen String erhälst.


----------



## noisebreath (20. Okt 2009)

sowas? kanns grad nicht testen.


```
public static string SerializeBase64(object o)
    {
    // Serialize to a base 64 string
    byte[] bytes;
    long length = 0;
    MemoryStream ws = new MemoryStream();
    BinaryFormatter sf = new BinaryFormatter();
    sf.Serialize(ws, o);
    length = ws.Length;
    bytes = ws.GetBuffer();
    string encodedData = bytes.Length + ":" + Convert.ToBase64String(bytes, 0, bytes.Length, Base64FormattingOptions.None);
    return encodedData;
    }



    public static object DeserializeBase64(string s)
    {
    // We need to know the exact length of the string - Base64 can sometimes pad us by a byte or two
    int p = s.IndexOf(':');
    int length = Convert.ToInt32(s.Substring(0, p));

    // Extract data from the base 64 string!
    byte[] memorydata = Convert.FromBase64String(s.Substring(p + 1));
    MemoryStream rs = new MemoryStream(memorydata, 0, length);
    BinaryFormatter sf = new BinaryFormatter();
    object o = sf.Deserialize(rs);
    return o;
    }
```


----------



## noisebreath (20. Okt 2009)

verdammt.. die beiden funktionen scheinen von ner externen lib abhängig zu sein


----------

