Java Serializable Object to Byte Array
Prepare the byte array to send:
ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectOutputStream out = null;try { out = new ObjectOutputStream(bos); out.writeObject(yourObject); out.flush(); byte[] yourBytes = bos.toByteArray(); ...} finally { try { bos.close(); } catch (IOException ex) { // ignore close exception }}
Create an object from a byte array:
ByteArrayInputStream bis = new ByteArrayInputStream(yourBytes);ObjectInput in = null;try { in = new ObjectInputStream(bis); Object o = in.readObject(); ...} finally { try { if (in != null) { in.close(); } } catch (IOException ex) { // ignore close exception }}
The best way to do it is to use SerializationUtils
from Apache Commons Lang.
To serialize:
byte[] data = SerializationUtils.serialize(yourObject);
To deserialize:
YourObject yourObject = SerializationUtils.deserialize(data)
As mentioned, this requires Commons Lang library. It can be imported using Gradle:
compile 'org.apache.commons:commons-lang3:3.5'
Maven:
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.5</version></dependency>
And more ways mentioned here
Alternatively, the whole collection can be imported. Refer this link
If you use Java >= 7, you could improve the accepted solution using try with resources:
private byte[] convertToBytes(Object object) throws IOException { try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bos)) { out.writeObject(object); return bos.toByteArray(); } }
And the other way around:
private Object convertFromBytes(byte[] bytes) throws IOException, ClassNotFoundException { try (ByteArrayInputStream bis = new ByteArrayInputStream(bytes); ObjectInputStream in = new ObjectInputStream(bis)) { return in.readObject(); } }