所以我有一个需要实现的方法。它获取一个InputStream并返回一个供应商,如下所示:
public Supplier<Integer> buildPipe(InputStream input)
现在,我想从InputStream中读取一个字符(可能使用read()方法并返回它,但是我不知道如何将其存储为int以便可以与Supplier一起返回它。
我希望有人可以帮助我。
实际上不可能不通过解码桥就直接从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
不会像人们期望的那样是透明的。
InputStream是一个面向字节的流,如果需要一个字符而不是一个字节,则应使用InputStreamReader。也许这样的事情将为您工作:
public Supplier<Integer> buildPipe(InputStream input) {
return () -> {
try {
return Integer.valueOf(input.read());
} catch (IOException e) {
e.printStackTrace();
}
return Integer.valueOf(-1);
};
}