diff options
Diffstat (limited to 'src/main/java/derms')
| -rw-r--r-- | src/main/java/derms/net/Packet.java | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/main/java/derms/net/Packet.java b/src/main/java/derms/net/Packet.java new file mode 100644 index 0000000..68416d7 --- /dev/null +++ b/src/main/java/derms/net/Packet.java @@ -0,0 +1,25 @@ +package derms.net; + +import java.io.*; +import java.net.DatagramPacket; +import java.net.SocketAddress; + +public class Packet { + public static DatagramPacket encode(Serializable obj, SocketAddress dst) 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, dst); + } + + public static <T extends Serializable> T decode(DatagramPacket pkt, Class<T> clazz) throws IOException, ClassNotFoundException, ClassCastException { + ObjectInputStream objStream = new ObjectInputStream( + new ByteArrayInputStream(pkt.getData())); + T obj = clazz.cast(objStream.readObject()); + objStream.close(); + return obj; + } +} |