Java Serializable Object to Byte Array Java Serializable Object to Byte Array java java

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>

Jar file

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();    } }