Java-Sockets:InputStream.read()vs BufferedReader.read()

时间:2009-10-11 12:41:46

标签: java sockets inputstream streamreader buffering

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

BufferedReader.read()InputStream.read()相同吗? (假设已经使用InputStream作为基础构造了BufferedReader)

分别读取每个字符时使用InputStream.read()会更有效吗?还是有更好的方法吗?

2 个答案:

答案 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读取字节,转换为字符,然后返回,这可能是非常低效的。