黑马程序员技术交流社区

标题: 转化流在做怪 [打印本页]

作者: 胡文彬    时间: 2014-3-9 22:25
标题: 转化流在做怪
BufferedReader bfr=new BufferedReader(new FileReader(f));
上面这句定义了一个字符文件流,
我就纳闷了“ab中国”,在文件中就包含单个字节又包含双字节,他为什么能读出,后来发现
FileReader 是InputStreamReader的子类,既转化流,将字节流转化成字符流,
我认为转化过程是这样的 :1.先读字节a  然后将转化成字符啊
                                     2.b与1一样
                                     3.将中的前个字节读出,发现最高位是1,接着读中 的第二个字节,再根据编码表解码成中
                                     4.国与中一样

   我要问的是:所有流操作都是在内存中进行的(过程),无非是读写,那么给变量赋值是否也涉及到流呢?


作者: 赵卓辉    时间: 2014-3-10 02:07
我认为:流操作不仅仅只涉及内存,假如你要都去硬盘中一个文件并打印到控制台,这个过程中先是从硬盘读取数据到内存,然后打印到控制台。对与你所说的对变量赋值是否涉及到流要看这个变量是否需要持久化,也就是存到硬盘或者其他持久化设备上。简单的变量赋值应该没有用到流,因为如果用到流就要创建流对象。简单的int a=3;这样的语句没有用到流。
作者: 胡文彬    时间: 2014-3-10 09:44
赵卓辉 发表于 2014-3-10 02:07
我认为:流操作不仅仅只涉及内存,假如你要都去硬盘中一个文件并打印到控制台,这个过程中先是从硬盘读取数 ...

流是对数据传输的一个抽象。去硬盘上读数据,实现要在内存中创建流,然后,cpu中断了,将硬盘上的字节数据利用io系统,读到一块内存中(比如0x0000到0x0004被赋值整数666),这时,cpu就可以操作者数据了,同样int x=666;也会在内存中(比如0x0040到0x0044被赋值666),不都涉及到赋值操作吗




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2