public ChirpBinaryMessage(byte[] bytes) { DataInputStream dis = new DataInputStream(new ByteArrayInputStream(bytes)); try { byte type = dis.readByte(); if (type != MessageType.ChirpMessage.typeValue) { throw new IllegalArgumentException("This isn't a chirp message!"); } byte from = dis.readByte(); byte to = dis.readByte(); int messageId = dis.readInt(); EnumSet<IChirpMessage.MessageFlags> flags = ChirpMessage.flagSetFromByte(dis.readByte()); String sender = dis.readUTF(); String recipient = dis.readUTF(); String messageStr = dis.readUTF(); this.message = new ChirpMessage(from, to, messageId, flags, sender, recipient, messageStr); } catch (IOException ex) { throw new RuntimeException(ex); } }