private Packet readFromPacket(Packet packet) { Packet newPacket = new Packet(); ByteBuffer buffer = ByteBuffer.allocate(4096); boolean writeDone; boolean readDone; do { writeDone = packet.writeTo(buffer); buffer.flip(); readDone = newPacket.readFrom(buffer); if (buffer.hasRemaining()) { throw new IllegalStateException("Buffer should be empty! " + buffer); } buffer.clear(); } while (!writeDone); if (!readDone) { throw new IllegalStateException("Read should be completed!"); } newPacket.setConn(localConnection); return newPacket; }