package sample;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/*
* A simple class to show how to serialize/deserialize an object instance to/from byte array
* and how to check whether the deserialized object instance is equal to the object instance
* that was used for serialization (method checkEqualsAfterSerializeDeserialize)
*/
public class SerialUtil {
public static byte[] serialize(Serializable serializable) throws IOException {
if (serializable == null) {
throw new IOException("serializable == null");
}
ByteArrayOutputStream baos = null;
ObjectOutputStream oos = null;
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(serializable);
oos.flush();
baos.flush();
byte[] ba = baos.toByteArray();
return ba;
}
catch (IOException ioex) {
throw ioex;
}
catch (Throwable t) {
throw new IOException(t);
}
finally {
if (oos != null) {
try { oos.close(); } catch (Exception ex) { /* */ }
}
if (baos != null) {
try { baos.close(); } catch (Exception ex) { /* */ }
}
}
}
public static Object deserialize(byte[] baSerializedObject) throws IOException {
if (baSerializedObject == null) {
throw new IOException("baSerializedObject == null");
}
ByteArrayInputStream bais = null;
ObjectInputStream ois = null;
try {
bais = new ByteArrayInputStream(baSerializedObject);
ois = new ObjectInputStream(bais);
Object deserializedObject = ois.readObject();
return deserializedObject;
}
catch (IOException ioex) {
throw ioex;
}
catch (Throwable t) {
throw new IOException(t);
}
finally {
if (ois != null) {
try { ois.close(); } catch (Exception ex) { /* */ }
}
if (bais != null) {
try { bais.close(); } catch (Exception ex) { /* */ }
}
}
}
public static boolean checkEqualsAfterSerializeDeserialize(Serializable serializable) throws IOException {
if (serializable == null) {
throw new IOException("serializable == null");
}
byte[] ba = serialize(serializable);
Object deserializedObject = deserialize(ba);
if (deserializedObject == null) {
return false;
}
if (!serializable.getClass().isAssignableFrom(deserializedObject.getClass())) {
return false;
}
boolean bret = deserializedObject.getClass().cast(serializable).equals(serializable);
return bret;
}
}