### Question:
MoreBodySubscribers { public static BodySubscriber<Reader> ofReader(Charset charset) { requireNonNull(charset); return BodySubscribers.mapping(ofByteChannel(), ch -> Channels.newReader(ch, charset)); } private  MoreBodySubscribers(); static BodySubscriber<T> fromAsyncSubscriber(
          S downstream, Function<? super S, ? extends CompletionStage<T>> asyncFinisher); static BodySubscriber<T> withReadTimeout(BodySubscriber<T> base, Duration timeout); static BodySubscriber<T> withReadTimeout(
      BodySubscriber<T> base, Duration timeout, ScheduledExecutorService scheduler); static BodySubscriber<ReadableByteChannel> ofByteChannel(); static BodySubscriber<Reader> ofReader(Charset charset); static BodySubscriber<T> ofObject(
      TypeRef<T> type, @Nullable MediaType mediaType); static BodySubscriber<Supplier<T>> ofDeferredObject(
      TypeRef<T> type, @Nullable MediaType mediaType);  }### Answer:
@Test void ofReader_isCompleted() { var subscriber = ofReader(US_ASCII); assertNotNull(toFuture(subscriber).getNow(null)); }
@Test void ofReader_decodesInGivenCharset() throws IOException { var str = "جافا ههه"; var subscriber = ofReader(UTF_8); subscriber.onSubscribe(FlowSupport.NOOP_SUBSCRIPTION); subscriber.onNext(List.of(UTF_8.encode(str))); subscriber.onComplete(); var read = new BufferedReader(getBody(subscriber)).readLine(); assertEquals(str, read); }