4

我正在从 Socket 的 InputStream 中读取数据。因为我正在动态解析传入的数据,所以我需要逐个字符地读取。

BufferedReader.read()同样的事情InputStream.read()吗?(假设 BufferedReader 是以 InputStream 为基础构建的)

分别读取每个字符时使用 InputStream.read() 是否更有效?或者有没有更好的方法?

4

2 回答 2

5

BufferedReader 将从底层 Reader 读取多个字符。InputStream 提供字节。所以他们正在研究两种不同的数据类型。您如何将 Reader 包裹在 Stream 周围?大概你已经做了类似的事情:

 BufferedReader in
   = new BufferedReader(new InputStreamReader(socket));

在这种情况下,我会小心指定您的字符编码。

从优化的角度来看,使用 BufferedReader 会更好,因为它会一次读取几千字节,并且您可以在需要时获取每个字符(不一定强制读取新的 IO)。

于 2009-10-11T12:43:31.107 回答
0

InputStream 类的 read() 方法是一个抽象方法。我猜应该是 InputStreamrReader。回到你的问题,InputStreamReader 和 BufferesReader 类的 read() 方法都做同样的事情——返回字符的 ascii 值,唯一的区别是 BufferedReader 使用所谓的缓冲,它允许我们减少读取的频率通过将块复制到主内存来访问磁盘/STDIN,其中使用 InputStreamReader 每次调用 read() 都可能导致从磁盘/STDIN 读取字节,转换为字符,然后返回,这可能非常低效。

于 2016-12-19T15:23:17.143 回答