0

所以我有一个我需要实现的方法。它获取一个 InputStream 并返回一个供应商,如下所示:

public Supplier<Integer> buildPipe(InputStream input)

现在我想从 InputStream 中读取一个字符(可能使用 read() 方法)并返回它,但我不知道如何将它存储为 int 以便我可以使用供应商返回它。

我希望有人可以帮助我。

4

2 回答 2

1

如果不通过解码桥,实际上不可能直接从InputStreama转到 a。codepoint为此,您需要知道Charset或假设它。InputStreamReader是那座桥。

例如:

InputStream is = new ByteArrayInputStream(new byte[]{1,2});
InputStreamReader reader = new InputStreamReader(is, StandardCharsets.UTF_8);

现在您可以从阅读器而不是输入流中获得供应商。

Supplier<Integer> next(InputStreamReader reader) {
    Supplier<Integer> s = () -> {
        try {
            return reader.read();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    };
    return s;
}

请注意,这InputStreamReader是有状态的,因此您Supplier不会像预期的那样具有引用透明性。

于 2020-02-24T12:10:32.523 回答
-1

InputStream 是一个面向字节的流,如果你需要一个字符,而不是一个字节,你应该使用 InputStreamReader。也许这样的事情会为你工作:

  public Supplier<Integer> buildPipe(InputStream input) {
    return () -> {
      try {
        return Integer.valueOf(input.read());
      } catch (IOException e) {
        e.printStackTrace();
      }
      return Integer.valueOf(-1);
    };
  }
于 2020-02-24T12:13:53.650 回答