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