日期:2014-05-20  浏览次数:20664 次

java中的几个问题,恳求高手看看

FileInputStream     f=new   FileInputStream( "gao.txt ");
byte[]   b=new   byte[100];
BufferedInputStream   bs=new   BufferedInputStream(f);
int   size;
while((size=bs.read(b,0,100))!=-1)
{
String   s=new   String(b);
System.out.println(s);
}

FileInputStream     f=new   FileInputStream( "gao.txt ");
byte[]   b=new   byte[100];
int   size;
while((size=f.read(b,0,100))!=-1)
{
String   s=new   String(b);
System.out.println(s);
}
有什么本质差别吗?
能不能讲一下java中的FileChannel与pipe之间的本质,讲的越明白越通俗越好,现谢了。

------解决方案--------------------
管道流是先在文件里读取数据缓存到分配的缓冲区,然后再从缓冲区里面读取数据...fileChannel没用过,不太明白,建议查API吧
------解决方案--------------------
上面两个程序一个用了buffer,用buffer的程序在读大文件时速度会加快很多,小文件情况两者速度基本相同。
---------
FileChannel将文件中的某个区域直接映射到内存中;对于较大的文件,这通常比调用普通的 read 或 write 方法更为高效。
而Pipe管道由一对通道组成:一个可写入的 sink 通道和一个可读取的 source 通道。一旦将某些字节写入接收器通道,就可以按照与写入时完全相同的顺序从源通道中读取这些字节。
这两者无本质区别,是继承关系。
------解决方案--------------------
頂..........,學習
------解决方案--------------------

上面两个程序一个用了buffer,用buffer的程序在读大文件时速度会加快很多,小文件情况两者速度基本相同。
---------
FileChannel将文件中的某个区域直接映射到内存中;对于较大的文件,这通常比调用普通的 read 或 write 方法更为高效。
而Pipe管道由一对通道组成:一个可写入的 sink 通道和一个可读取的 source 通道。一旦将某些字节写入接收器通道,就可以按照与写入时完全相同的顺序从源通道中读取这些字节。
这两者无本质区别,是继承关系。

学习
谢谢~
------解决方案--------------------
BufferedInputStream流是指读取数据时,数据首先保存进入缓冲区,其后的操作直接在缓冲区中完成
------解决方案--------------------
各位老江湖,你们学这计算机到现在有什么感觉啊!
希望这为朋友不要生气!
------解决方案--------------------
区别就是 使用Buffered时多个缓冲 效率高些
使用IO时 最好套用 因为IO适合(装饰模式)
又兴趣去读读
------解决方案--------------------
还有在使用缓冲区读写数据时,记得把流关掉,否则有可能会丢失数据.
------解决方案--------------------
FileInputStream是节点流,从数据源直接过来,
BufferedInputStream是过滤流,不能从数据源直接过来,只能给节点流加外壳


你的第一个程序是给FileInputStream加上buffered功能,让数据读得更有效率更快。
------解决方案--------------------
受益了。。。谢谢各位
------解决方案--------------------
BufferedInputStream
优化效率