private <T> Optional<T> decodeOptional(DataInputStream is, Codec<T> codec) throws IOException { return is.readBoolean() ? Optional.of(codec.decode(is)) : Optional.empty(); }