### Question:
NeighborsPacketData implements PacketData { public static NeighborsPacketData readFrom(final RLPInput in) { in.enterList(); final List<DiscoveryPeer> peers = in.readList(DiscoveryPeer::readFrom); final long expiration = in.readLongScalar(); in.leaveListLenient(); return new NeighborsPacketData(peers, expiration); } private  NeighborsPacketData(final List<DiscoveryPeer> peers, final long expiration); static NeighborsPacketData create(final List<DiscoveryPeer> peers); static NeighborsPacketData readFrom(final RLPInput in); @Override void writeTo(final RLPOutput out); List<DiscoveryPeer> getNodes(); long getExpiration(); @Override String toString();  }### Answer:
@Test public void readFrom() { final long timeSec = Instant.now().getEpochSecond(); final List<DiscoveryPeer> peers = Arrays.asList(DiscoveryPeer.fromEnode(enode()), DiscoveryPeer.fromEnode(enode())); BytesValueRLPOutput out = new BytesValueRLPOutput(); out.startList(); out.writeList(peers, DiscoveryPeer::writeTo); out.writeLongScalar(timeSec); out.endList(); Bytes encoded = out.encoded(); final NeighborsPacketData deserialized = NeighborsPacketData.readFrom(RLP.input(encoded)); assertThat(deserialized.getNodes()).isEqualTo(peers); assertThat(deserialized.getExpiration()).isEqualTo(timeSec); }