summaryrefslogtreecommitdiffstats
path: root/src/main/java/derms/replica/replica1/ObjectPacket.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/derms/replica/replica1/ObjectPacket.java')
-rw-r--r--src/main/java/derms/replica/replica1/ObjectPacket.java38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/main/java/derms/replica/replica1/ObjectPacket.java b/src/main/java/derms/replica/replica1/ObjectPacket.java
new file mode 100644
index 0000000..28010c0
--- /dev/null
+++ b/src/main/java/derms/replica/replica1/ObjectPacket.java
@@ -0,0 +1,38 @@
+package derms.replica.replica1;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.net.DatagramPacket;
+import java.net.SocketAddress;
+
+public class ObjectPacket {
+ public static DatagramPacket create(Serializable obj, SocketAddress remoteAddr) throws IOException {
+ ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
+ ObjectOutputStream objStream = new ObjectOutputStream(byteStream);
+ objStream.writeObject(obj);
+ objStream.flush();
+ byte[] buf = byteStream.toByteArray();
+ objStream.close();
+ return new DatagramPacket(buf, buf.length, remoteAddr);
+ }
+
+ public static <E> E deserialize(DatagramPacket pkt, Class<E> clazz) throws IOException {
+ ObjectInputStream objectStream;
+ try {
+ objectStream = new ObjectInputStream(
+ new ByteArrayInputStream(pkt.getData()));
+ } catch (Exception e) {
+ throw new IOException("failed to create input stream: "+e.getMessage());
+ }
+
+ try {
+ return clazz.cast(objectStream.readObject());
+ } catch (Exception e) {
+ throw new IOException(e.getMessage());
+ }
+ }
+} \ No newline at end of file