1,为什么一定要搞出个流呢,程序不能直接向比如文件中读或写文件吗,为什么一定搞出个流出来呢?能把流理解成是一个缓冲区吗,平衡内存和外存的速度差异,因为内存快,外存慢?2、为什么又要分出那么多种流呢,比如弄个输入流,输出流,怎么又弄出个缓冲流,输入流,输出流不也是为了缓冲吗,否则干嘛要用流呢?其他的什么文件流,转换流,对象流,我更是一头雾水。刚开始学java,希望能通俗的概念的解释下,我是菜鸟。
为什么要用流,我不解释了,网上多的很。你把流理解成管道就容易多了。java io 的设计模式就是一种装饰模式,将基本的io流不断的包装,形成功能更加强大,操作更加方便的io流。当然,用字节流FileInputStream/FileOutputStream 是可以处理所有问题的,但是它读取的数据是字节,当我们处理文本的时候,常常是直接处理一个一个的文字或是一行一行的处理,显然字节就不能满足需求了。也就是说当不能满足实际需求的时候,就要将基本流进行包装,扩展功能,方便操作。比如 new BufferedInputStream(new FileInputStream(new File("xxxxx")))可以理解成一个小的管道,套在一个大的管道中,(一个大的管道在继续套更大的管道)关于IO的操作,其实蛮固定液蛮简单的。要是这个io动了,可以看看nio(new io),里面就是用的通道。java io是java的核心,不管你以后做web还是cs,必须的。装饰模式跟你穿衣服是一个道理的,可能穿一件不太好看,拿就搭个外套一件太冷了,就多穿几件。还有,在io中,通常是用多态来操作的如:Reader in=new BufferedReader( //包装一个字符流 new InputStreamReader( //包装一个转换流 字节-->字符 new (BufferedInputStream( //包装一个缓冲流 new FilterInputStream( //包装一个字节流 new File("xxxx")))))) //包装一个文件而是用的,通常是Reader的 read(char[] cbuf,int off,int len)即 in.read(xxxxxx);当然,这个例子有点BT了,但是看包装就简单多了,就一层套一层,一层套一层,大的套小的,大的套小的
计算机是以二进制存储文件的,就是0,1。流分字符流和字节流两种,字节流就是以byte为单位的,你可以把一张图片转换为字节数组,你也可以把一个文本文件转换为字节数组等。而字符流(InputStream,OutputStream)是以字符为单位,你要操作一些文本信息还是很方便的(Reader,Wirter)。没有那么乱,慢慢学别着急。