看了一本有关JAVA性能优化的书,里面不提倡用BuffredStreamReader,提倡用自己做的BYTE数组来BUFFER,其中初始化数组长度的时候,用到的是inputStream的available()方法,当时我测试的代码如下,对比BuffredStreamReader,性能确实有巨大提高,但是我发现最后读有些文档的话根本读不完全byte[] InputStreamToByte(InputStream iStrm)
{
                int len = iStrm.available();
byte[] b =  new byte[len];
@SuppressWarnings("unused")
int ch = iStrm.read(b);
return b;
}比如说读这个URL的源代码,跟直接用IE打开看到的源代码差了很多
http://news.yonghua.net.cn/htmldata/2005_05/2/14/article_275442_1.html

解决方案 »

  1.   

    BuffredStreamReader使用没有什么问题,你可以正常的使用啊。
    int len = iStrm.available();这个写法是错误的!!available是表示在不阻塞的情况下,还可以读取多少个字节。而不是指这个流还有多长!对于网络流来说,这个是不确定的,所以你不能使用这个方法来判断读取数据长度
      

  2.   

    这个不是bug,这是因为BuffredStreamReader这个类读取文件以后,会先放入缓存中,这就是为什么这个类在读取的性能高的原因,所以读取到最后需要把缓存中的数据拿出来,如果直接close掉这个流的话,最后读取的数据因为没有从缓存中释放出来,所以就丢失掉了。所以先要清空缓存再close。