我正在从 Socket 的 InputStream 中读取数据。因为我正在动态解析传入的数据,所以我需要逐个字符地读取。
做BufferedReader.read()
同样的事情InputStream.read()
吗?(假设 BufferedReader 是以 InputStream 为基础构建的)
分别读取每个字符时使用 InputStream.read() 是否更有效?或者有没有更好的方法?
我正在从 Socket 的 InputStream 中读取数据。因为我正在动态解析传入的数据,所以我需要逐个字符地读取。
做BufferedReader.read()
同样的事情InputStream.read()
吗?(假设 BufferedReader 是以 InputStream 为基础构建的)
分别读取每个字符时使用 InputStream.read() 是否更有效?或者有没有更好的方法?
BufferedReader 将从底层 Reader 读取多个字符。InputStream 提供字节。所以他们正在研究两种不同的数据类型。您如何将 Reader 包裹在 Stream 周围?大概你已经做了类似的事情:
BufferedReader in
= new BufferedReader(new InputStreamReader(socket));
在这种情况下,我会小心指定您的字符编码。
从优化的角度来看,使用 BufferedReader 会更好,因为它会一次读取几千字节,并且您可以在需要时获取每个字符(不一定强制读取新的 IO)。
InputStream 类的 read() 方法是一个抽象方法。我猜应该是 InputStreamrReader。回到你的问题,InputStreamReader 和 BufferesReader 类的 read() 方法都做同样的事情——返回字符的 ascii 值,唯一的区别是 BufferedReader 使用所谓的缓冲,它允许我们减少读取的频率通过将块复制到主内存来访问磁盘/STDIN,其中使用 InputStreamReader 每次调用 read() 都可能导致从磁盘/STDIN 读取字节,转换为字符,然后返回,这可能非常低效。