Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从InputStream读取字符并将其返回给供应商<;整数>;(爪哇)_Java_Methods_Inputstream_Supplier - Fatal编程技术网

Java 如何从InputStream读取字符并将其返回给供应商<;整数>;(爪哇)

Java 如何从InputStream读取字符并将其返回给供应商<;整数>;(爪哇),java,methods,inputstream,supplier,Java,Methods,Inputstream,Supplier,所以我有一个方法需要实现。它获取一个InputStream并返回一个供应商,如下所示: 公共供应商构建管道(输入流输入) 现在我想从InputStream中读取一个字符(可能使用read()-方法)并返回它,但我不知道如何将其存储为int,以便与供应商一起返回 我希望有人能帮我。如果不经过解码桥,直接从输入流到码点是不可能的。为此,您需要知道字符集,或者假设它InputStreamReader就是那个桥 例如: InputStream is = new ByteArrayInputStream(

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

公共供应商构建管道(输入流输入)

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


我希望有人能帮我。

如果不经过解码桥,直接从
输入流
码点
是不可能的。为此,您需要知道
字符集
,或者假设它<代码>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){ 供应商s=()->{ 试一试{ 返回reader.read(); }捕获(IOE异常){ 抛出新的运行时异常(e); } }; 返回s; }
请注意,
InputStreamReader
是有状态的,因此您的
供应商
不会像预期的那样是透明的

InputStream是面向字节的流,如果需要字符而不是字节,则应使用InputStreamReader。也许这样的事情对你有用:

  public Supplier<Integer> buildPipe(InputStream input) {
    return () -> {
      try {
        return Integer.valueOf(input.read());
      } catch (IOException e) {
        e.printStackTrace();
      }
      return Integer.valueOf(-1);
    };
  }
公共供应商构建管道(输入流输入){
返回()->{
试一试{
返回Integer.valueOf(input.read());
}捕获(IOE异常){
e、 printStackTrace();
}
返回整数.valueOf(-1);
};
}

所以基本上你要问的是如何将字符串解析为整数?虽然这是可以做到的,但这不是一个好主意。您必须在try/catch中包装读取的每个字符。这不值得。打印堆栈跟踪是糟糕的异常处理。您应该将IOException包装在RuntimeException中并抛出