org.async.rmi.MarshalledObject Maven / Gradle / Ivy
package org.async.rmi;
import org.async.rmi.server.MarshalInputStream;
import org.async.rmi.server.MarshalOutputStream;
import java.io.*;
import java.util.Arrays;
/**
* Created by Barak Bar Orion
* 11/19/14.
*/
public class MarshalledObject implements Externalizable {
private byte[] bytes;
public MarshalledObject() {
}
public MarshalledObject(T object) throws IOException {
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
MarshalOutputStream marshalOutputStream = new MarshalOutputStream(byteArrayOutputStream)) {
marshalOutputStream.writeObject(object);
bytes = byteArrayOutputStream.toByteArray();
}
}
@SuppressWarnings("unchecked")
public T get() throws IOException, ClassNotFoundException {
try(ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
MarshalInputStream marshalInputStream = new MarshalInputStream(byteArrayInputStream)){
return (T)marshalInputStream.readObject();
}
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(bytes);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
bytes = (byte[]) in.readObject();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MarshalledObject that = (MarshalledObject) o;
return Arrays.equals(bytes, that.bytes);
}
@Override
public int hashCode() {
return Arrays.hashCode(bytes);
}
}