1. 相对论和IO流之说
英文 Input/Output Stream 词典中Stream的意思:有方向性的流动的液体/电流 强调过程
那我们理解I/O Stream是否可以看作是输入/输出方向的流体
从相对论的角度看待 I/O流 冬天旱季的时候,长江的支流把水输出到长江中,长江输入这些水
夏季雨季的时候,长江的支流转换角色输入这些水,而长江输出这些水
当然这个比喻可能打的不是很好,但是我们可以看到作为输入方还是输出方并不是绝对的,而是相对的。
总结: 必须要有管道 相对谁来说,谁是输入输出 流动一定会有输出口和输入口 而且谁输出谁输入要看你选定的参照系
2. 汉语文学理解IO流
我觉得这个解释是比较时候来解释I/O流这个名词的:像水流的东西输入/输出
总结:不管是中文还是英文的解释(仅代表个人)都表明了两件事
有一个物体会流动,像水一样 有输入和输出两种方式或者两种方向
3. 图解IO流
I/O Stream 文档中的两幅图 Reading information into a program.这是官方文档对这张图的解释,对于程序来说是input对于数据源来说是output,所以说是程序在读取数据源中的数据。
Writing information from a program而与上面相反,这次的程序数据流到了数据源中,所以程序在output而数据源在input,这个时候程序在往程序中灌输数据,所以说是程序在写数据源中的数据。
上面两种方式都是站在程序的角度上对数据源的操作,所以我们的参照物是程序,因为我们操纵的就是程序
4. 俩亲爹:InputStream和OutPutStream
上面两节的解释中,我们能了解到 I/O流就是用来管理各种数据的输入和输出,所以在这个包中有两个终极静态父类:inputStream和outputStream,这两个类提供和数据操作相关的方法,后有其他不同类型的数据控制子类来继承这两个类。
inputStream:专门管理数据的读相关操作
outputStream:专门管理数据的写相关操作
5. FileInputStream字节流读取文件
上面有两个读取方式,一个读出的是文字,另外一个读出的全部是字节,在看源码的时候和源码的注释都说明了这个类是按照字节读的,下面这段代码会比较直观
.read()按照字节的二进制形式一个一个读
如果我们不想看到ASCII码就需要将它装换成char类型,就像体验中的第一种方式那样
注意:在代码的末尾都要加上xxx。close();不然运行结果出来以后,程序不会关闭
6. FileOutPutStream字节流写入文件
代码体验 在看frank的课前对这个类的体验
体验: CSDN博客https://blog.csdn.net/ai_bao_zi/article/details/81097898
更直观的例子 暂时不知道用处
查看源码
观看frank视频
我自己尝试的文件输出流(当给写方法的时候不需要使用for循环)
直接使用写函数,读取整个字节数组
7. buff缓冲复制文件
没有听缓冲的时候 综合思考:
1.综合FileInputStream和FileOutputStream的特性我们可以看出:文件流的读取是一个一个字节读的,写也是一个一个字节写。
2.要复制一个文件先要读取这个文件的内容,再将这些内容写入一个新的文件中。
那我们是否可以将文件读文件的字节传输到写文件的字节流里面
buff就相当于缓冲,搬箱,不需要一个字节一个字节传
8. buffered字节缓冲流、装饰设计模式
复制文件的代码是自己写了缓冲区,什么是缓冲区呢?在原来的读写文件中是,按字节读也是按字节写的,速度很慢,但是在上面我们加了一个缓冲以后,它是一次性读1000个字节,这样就会更快。
而jdk的源码中也是有缓冲输出输入流这样的概念的:这是缓冲输入流,这里的一次性读取8192个字节流
使用这个方法写出来的复制文件函数:在这里面我们不能直接将我们的path路径传入到BufferedInputStream而是使用了文件输入输出流创建的对象。因为BufferedInputStream中接收的是对象而不是字符串,这就涉及到了一个设计模式叫装饰设计模式
9. FileReader和FileWriter,俩专门来搞定txt文件
上述的流都是使用字节来读,但是这个是读字符,这种流非常适合用来读取文本文件一类的文件。
字符流 其实这个流也是以上面的流文件作为基础,将字节读取封装成字符读取。
下面先看看
代码和原来的比起来是更加简洁了一些,不需要再设置字节数组来进行读,在写文件的时候也不需要获取字符串的字节流
10. BufferedReader、BufferedWriter
Buffe VIP 更进一步 更好使用 可以直接读一行,而且输出的时候也是一行输出,这样的使用感受就会更好的了
使用写也会非常的简单
注意:不管什么时候都要记得把流关闭,特别是写文件的时候,如果写文件没有关闭,写出来的文件中不会有内容显示
11. 一次性讲解剩余的N个流(扩展课)Java里那些极其骚的IO流
各种流的体验
12. Apache Common IO
Apache Commons IO
13. IO流结束语
|