На самом деле невозможно go напрямую с InputStream
на codepoint
без прохождения через мост декодирования. Для этого вам нужно знать, что Charset
, или предполагать это. InputStreamReader
это тот мост.
например:
InputStream is = new ByteArrayInputStream(new byte[]{1,2});
InputStreamReader reader = new InputStreamReader(is, StandardCharsets.UTF_8);
Теперь вы можете иметь своего Поставщика из Reader, а не из входного потока.
Supplier<Integer> next(InputStreamReader reader) {
Supplier<Integer> s = () -> {
try {
return reader.read();
} catch (IOException e) {
throw new RuntimeException(e);
}
};
return s;
}
Обратите внимание, что InputStreamReader
с состоянием и, следовательно, ваш Supplier
не будет ссылочно-прозрачным, как можно было бы ожидать.