javaserializationserializableobjectoutputstream

How to write serializable object to String without writing to file?


I want to write a class object to the string and then again create an object from it. I searched on the net but all I found is to write an object to file however I want to write in the string, not on file.

Below is the example of writing to file similarly I want to write in String or similar Object and not in the file.

some_class implements serializable {
    ...
}

FileOutputStream f = new FileOutputStream(new File("myObjects.txt"));
ObjectOutputStream o = new ObjectOutputStream(f);

// Write objects to file
o.writeObject(object1);

o.close();
f.close();

FileInputStream fi = new FileInputStream(new File("myObjects.txt"));
ObjectInputStream oi = new ObjectInputStream(fi);

// Read objects
some_class object2 = (some_class) oi.readObject();

oi.close();
fi.close();

Please help with the same.


Solution

  • This would be one way:

    try 
    {
        // To String
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream os = new ObjectOutputStream(bos);
        os.writeObject(object1);
        String serializedObject1 = bos.toString();
        os.close();
    
        // To Object 
        ByteArrayInputStream bis = new ByteArrayInputStream(serializedObject1.getBytes());
        ObjectInputStream oInputStream = new ObjectInputStream(bis);
        YourObject restoredObject1 = (YourObject) oInputStream.readObject();            
    
        oInputStream.close();
    } catch(Exception ex) {
        ex.printStackTrace();
    }
    

    I would prefer the Base64 way though.

    This would be an example of encoding:

    private static String serializableToString( Serializable o ) throws IOException {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(o);
            oos.close();
            return Base64.getEncoder().encodeToString(baos.toByteArray()); 
        }
    

    And this is an example of decoding:

     private static Object objectFromString(String s) throws IOException, ClassNotFoundException 
       {
            byte [] data = Base64.getDecoder().decode(s);
            ObjectInputStream ois = new ObjectInputStream( 
                                            new ByteArrayInputStream(data));
            Object o  = ois.readObject();
            ois.close();
            return o;
       }