summaryrefslogtreecommitdiffstats
path: root/src/main/java/derms/replica2/ObjectPacket.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/derms/replica2/ObjectPacket.java')
-rw-r--r--src/main/java/derms/replica2/ObjectPacket.java33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/main/java/derms/replica2/ObjectPacket.java b/src/main/java/derms/replica2/ObjectPacket.java
new file mode 100644
index 0000000..27852b0
--- /dev/null
+++ b/src/main/java/derms/replica2/ObjectPacket.java
@@ -0,0 +1,33 @@
+package derms.replica2;
+
+import java.io.*;
+import java.net.DatagramPacket;
+import java.net.SocketAddress;
+
+class ObjectPacket {
+ 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);
+ }
+
+ 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