这是一个关于底层流的问题。首先我先表述一下我对底层流的理解,先确认下对不对。
  所谓底层流通过一个朋友的指点,我的理解是:
  我先假设内存和硬盘之间的交互。如果是 InputStream 则这股输入流的最终目的地是内存,那么对于 InputStream 的底层流操作==内存缓冲区中这组数据的操作。如果是 OutputStream 则这股输出流的最终目的地是硬盘,那么对于 OutputStream 的底层流操作==还是内存缓冲区的这组数据操作,应为这组数据还没有发送出去。(不知道这样理解“底层流”这个术语的意思对不对)
  但是牛角尖的问题出来了。如果我们不设置缓冲区会怎么样呢??如果 InputStream 中数据是时时接收的,跳过了缓冲区。那是不是如果要修改一次,硬盘就是再通过输出流发送到内存中??同理在 OutputStream 输出流时,如果要再修改,就再输出一次? (因为刚开始看概念,所以还没办法自己写代码试验,还望各位高手见谅,因为这一部分上来就是搞概念,再看各种方法就简单,所以小弟才会提一些傻的概念问题,实在是想把这个抽象的一章学好,见谅!见谅!)
  其实我对底层流的不解,还有一个原因是,在看到 Writer 类中的 append()方法,其中一个方法是将 char 类型的实参传递给它的字符追加到 Writer 所封装的流中。而另一个版本接受一个 CharSequence 类型的实参并将它追加给底层的流。这个追加到底层流和追加到封装到底是怎么样子的不同?所以对此不解

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【llm0528】截止到2008-07-04 10:46:42的历史汇总数据(不包括此帖):
    发帖的总数量:43                       发帖的总分数:860                      
    结贴的总数量:43                       结贴的总分数:860                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    1、out的目地是硬盘的话,也就是FileOutputStream,操作的当前是文件,不会是内存,还有字节流write一下,就是执行一次写操作,所以才会有BufferOutputStream这样的的包装类来对字节流进去修饰
    2、Writer 字符流和字节流的方式不一样.
      

  3.   

    1. “InputStream 的底层流操作==内存缓冲区中这组数据的操作”你说的内存缓冲区(不是 BufferedXxxxxStream)可能并不存在。
    2. “如果是 OutputStream 则这股输出流的最终目的地是硬盘”输出流中数据最终流向的目的地不一定是硬盘,你说的是 FileOutputStream,它的数据流向才是文件(当然大多数情况此文件是存在硬盘中的)。
      

  4.   

    流的来源和去向没有固定的,很有可能是物理硬盘,也有可能是内存,还可能是网络JAVA中I/O采用的是装饰器模式,不管嵌了多少层,最后操作的目标(除了几个特殊类)都是byteStream,
    所以概念上讲并没有本质区别。缓冲可以极大的提高I/O读写效率。