我如何从 InputStream 中读取一个字符并 return 它在 Supplier<Integer> (Java)
How can I read a character from an InputStream and return it in a Supplier<Integer> (Java)
所以我有一个方法需要实现。它得到一个 InputStream 和 returns 一个像这样的供应商:
public Supplier<Integer> buildPipe(InputStream input)
现在我想从 InputStream 中读取一个字符(可能使用 read() 方法)并 return 它,但我不知道如何将它存储为一个 int 这样我就可以 return 它与供应商。
希望有人能帮帮我。
不通过解码桥直接从 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
不会像人们期望的那样是引用透明的。
InputStream是一个面向字节的流,如果你需要一个字符,而不是一个字节,你应该使用InputStreamReader。也许这样的东西对你有用:
public Supplier<Integer> buildPipe(InputStream input) {
return () -> {
try {
return Integer.valueOf(input.read());
} catch (IOException e) {
e.printStackTrace();
}
return Integer.valueOf(-1);
};
}
所以我有一个方法需要实现。它得到一个 InputStream 和 returns 一个像这样的供应商:
public Supplier<Integer> buildPipe(InputStream input)
现在我想从 InputStream 中读取一个字符(可能使用 read() 方法)并 return 它,但我不知道如何将它存储为一个 int 这样我就可以 return 它与供应商。
希望有人能帮帮我。
不通过解码桥直接从 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
不会像人们期望的那样是引用透明的。
InputStream是一个面向字节的流,如果你需要一个字符,而不是一个字节,你应该使用InputStreamReader。也许这样的东西对你有用:
public Supplier<Integer> buildPipe(InputStream input) {
return () -> {
try {
return Integer.valueOf(input.read());
} catch (IOException e) {
e.printStackTrace();
}
return Integer.valueOf(-1);
};
}