How to binary (de)serialize object into/form string?

java, serialization, string

Solution

Use `ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());` instead of `ByteArrayInputStream bais = new ByteArrayInputStream(out.getBytes());`, since the String conversion corrupts the data (because of the encoding).

If you really need to store the result in a String, you need a safe way to store arbitrary bytes in a String. One way of doing that is to us Base64-encoding.

A totally different approach would have been to not use the standard Java serialization for this class, but create your own Data to/from String converter.

Problem

I need serialize objects into String and deserialize. I readed sugestion on stackoverflow and make this code: ``` class Data implements Serializable { int x = 5; int y = 3; } public class Test { public static void main(String[] args) { Data data = new Data(); String out; try { // zapis ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(data); out = new String(baos.toByteArray()); System.out.println(out); // odczyt.========================================== ByteArrayInputStream bais = new ByteArrayInputStream(out.getBytes()); ObjectInputStream ois = new ObjectInputStream(bais); Data d = (Data) ois.readObject(); System.out.println("d.x = " + d.x); System.out.println("d.y = " + d.y); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } ``` } but I get error: ``` java.io.StreamCorruptedException: invalid stream header: EFBFBDEF at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298) at p.Test.main(Test.java:37) ``` Why? I expected: d.x = 5 d.y = 3 how to do in good way? Ah. I don't want to write this object in file. I have to have it in string format.

Original source