这是一个关于底层流的问题。首先我先表述一下我对底层流的理解,先确认下对不对。
所谓底层流通过一个朋友的指点,我的理解是:
我先假设内存和硬盘之间的交互。如果是 InputStream 则这股输入流的最终目的地是内存,那么对于 InputStream 的底层流操作==内存缓冲区中这组数据的操作。如果是 OutputStream 则这股输出流的最终目的地是硬盘,那么对于 OutputStream 的底层流操作==还是内存缓冲区的这组数据操作,应为这组数据还没有发送出去。(不知道这样理解“底层流”这个术语的意思对不对)
但是牛角尖的问题出来了。如果我们不设置缓冲区会怎么样呢??如果 InputStream 中数据是时时接收的,跳过了缓冲区。那是不是如果要修改一次,硬盘就是再通过输出流发送到内存中??同理在 OutputStream 输出流时,如果要再修改,就再输出一次? (因为刚开始看概念,所以还没办法自己写代码试验,还望各位高手见谅,因为这一部分上来就是搞概念,再看各种方法就简单,所以小弟才会提一些傻的概念问题,实在是想把这个抽象的一章学好,见谅!见谅!)
其实我对底层流的不解,还有一个原因是,在看到 Writer 类中的 append()方法,其中一个方法是将 char 类型的实参传递给它的字符追加到 Writer 所封装的流中。而另一个版本接受一个 CharSequence 类型的实参并将它追加给底层的流。这个追加到底层流和追加到封装到底是怎么样子的不同?所以对此不解
所谓底层流通过一个朋友的指点,我的理解是:
我先假设内存和硬盘之间的交互。如果是 InputStream 则这股输入流的最终目的地是内存,那么对于 InputStream 的底层流操作==内存缓冲区中这组数据的操作。如果是 OutputStream 则这股输出流的最终目的地是硬盘,那么对于 OutputStream 的底层流操作==还是内存缓冲区的这组数据操作,应为这组数据还没有发送出去。(不知道这样理解“底层流”这个术语的意思对不对)
但是牛角尖的问题出来了。如果我们不设置缓冲区会怎么样呢??如果 InputStream 中数据是时时接收的,跳过了缓冲区。那是不是如果要修改一次,硬盘就是再通过输出流发送到内存中??同理在 OutputStream 输出流时,如果要再修改,就再输出一次? (因为刚开始看概念,所以还没办法自己写代码试验,还望各位高手见谅,因为这一部分上来就是搞概念,再看各种方法就简单,所以小弟才会提一些傻的概念问题,实在是想把这个抽象的一章学好,见谅!见谅!)
其实我对底层流的不解,还有一个原因是,在看到 Writer 类中的 append()方法,其中一个方法是将 char 类型的实参传递给它的字符追加到 Writer 所封装的流中。而另一个版本接受一个 CharSequence 类型的实参并将它追加给底层的流。这个追加到底层流和追加到封装到底是怎么样子的不同?所以对此不解
楼主【llm0528】截止到2008-07-04 10:46:42的历史汇总数据(不包括此帖):
发帖的总数量:43 发帖的总分数:860
结贴的总数量:43 结贴的总分数:860
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
敬礼!
2、Writer 字符流和字节流的方式不一样.
2. “如果是 OutputStream 则这股输出流的最终目的地是硬盘”输出流中数据最终流向的目的地不一定是硬盘,你说的是 FileOutputStream,它的数据流向才是文件(当然大多数情况此文件是存在硬盘中的)。
所以概念上讲并没有本质区别。缓冲可以极大的提高I/O读写效率。