马克-to-win:很多老司机还搞不清什么是I什么是O。很简单,我有个土办法。以内存为单位,数据进内存叫In,出内存叫Out。读文件,是数据从硬盘进到内存,所以用in类型流来处理。
马
克-to-win:当时Sun为什么起名叫流?很多初学的同学有这个疑问,这一流就把他流晕了,
我小学数学老师让我们算张三走路的速度,谁追谁,他一动,像个流一样,
我就晕了。现在我跟大家说,举个例子,这里比如有个文件,java的处理方法是:把硬盘上的文件和内存中我们的一个流绑在一起,当你一个一个的顺序的读流
中的每个字节一遍后,你发现你无形中读了硬盘上的文件一遍。通过这样的方法,你不就能操作硬盘上的文件了吗?当你一个一个的顺序的读流中的每个字节时,像
不像你人不动,站在那里,瞪着眼睛,看着一个小孔,而有一串字节像流水一样,经过小孔。知道Sun为什么当时起名叫“流”了吧!
java当中有两种流,一种是字节流(byte
stream): 以1字节(8-bit)为单位进行读/写,一次处理一个字节。另一种是字符流(character
stream):,以字符为单位,一次处理一个字符。
马克-to-win:注意如果当遇到英文时,字符流足够聪明,一次就读一个字节,如遇到中文,一次读两个字节。比如a就占一个字节,即97.见下面的例子。我们摘录一段java官方文档:Each
invocation of one of an InputStreamReader's read() methods may
cause one or more bytes to be read from the underlying byte input
stream.