我如何从InputStream中读取字符并将其返回到Supplier (Java)

问题描述 投票:0回答:2

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

public Supplier<Integer> buildPipe(InputStream input)

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

我希望有人可以帮助我。

java methods inputstream supplier
2个回答
1
投票

实际上不可能不通过解码桥就直接从InputStream转到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不会像人们期望的那样是透明的。


-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);
    };
  }
© www.soinside.com 2019 - 2024. All rights reserved.