【问题标题】:Adding an integer to a vector [closed]将整数添加到向量 [关闭]
【发布时间】:2012-10-15 05:46:01
【问题描述】:

大家好,在读取我们使用的输入数据流时

BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));

如果BufferedReader 非常适合阅读流,为什么我们不能直接使用

BufferedReader stdin=new BufferedReader(System.in);

为什么我们需要InputStreamReader ??

【问题讨论】:

  • 因为……这不是它的工作方式?为什么不能将 String 传递给需要 Integer 的东西?

标签: java inputstreamreader


【解决方案1】:

BufferedReader 似乎是 Reader 类的包装类。用 System.in 构造一个 BufferedReader 根本不是有效的语法。 BufferedReader 类的原因来自文档:

一般情况下,Reader 发出的每个读取请求都会导致相应的 对底层字符或字节流的读取请求。它 因此建议将 BufferedReader 包裹在任何 Reader 周围 其 read() 操作可能代价高昂,例如 FileReaders 和 输入流读取器。例如,

BufferedReader in = new BufferedReader(new FileReader("foo.in"));

将缓冲来自指定文件的输入。没有缓冲,每个 调用 read() 或 readLine() 可能会导致从 文件,转换成字符,然后返回,可以是 非常低效。

【讨论】:

    【解决方案2】:

    很简单,因为没有BufferedReader(InputStream) 构造函数。只有两个构造函数可用:

    【讨论】:

      【解决方案3】:

      输入流读取器通过管道连接到缓冲读取器。

      JVM 将分配一定数量的缓冲区空间来一次性存储输入,而不是逐字节或逐字符存储。所以,当用户通过 InputStreamReader 完全输入输入后,输入就存储在 JVM 分配的缓冲区位置中。 使用此 Reader,读取速度更快,便于后续处理。

      【讨论】:

        【解决方案4】:

        您可以使用 BufferedInputStream(InputStream in) 。我想这就是你要找的……

        【讨论】:

          【解决方案5】:

          因为System.in 是Streams 而BufferedReader 是阅读器,所以你不能将流放在阅读器中,所以你必须像你一样为阅读器转换它。

          new BufferedReader(new InputStreamReader(System.in));
          

          Readers 和 Writers 在编码(UTF-8、ISO8859-2、 等),也称为“文本”。流操作字节,不一定是字节 构成任意对象。 (大多数只是操作字节数组。)这些 数据也称为“二进制数据”。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-04-11
            • 2015-05-01
            • 1970-01-01
            • 2016-04-06
            • 2014-06-05
            • 1970-01-01
            相关资源
            最近更新 更多