流:
像水流一样 一次可以读/写一个字节 读/写两个字节等
File中少了两个核心操作:读 & 写
常见的IO操作(红色方框标记的):
字节:操作的基本单元是字节
字符:操作的基本单元是unicode码元
文本文件: 用记事本打开是文本类型
二进制文件: 用记事本打开的类型看不懂
文件描述符表是有上限的 也是可配置的
拷贝文件的操作:
这个版本存在的问题:
1.当程序在read/write/new的时候触发异常 程序执行不到下面的close仍然会造成资源泄漏
修改措施:程序必须执行到close() 加上finally语句
2.当加上finally语句的时候还是存在一个问题 如果构造这个对象的时候路径对应的文件不存在 那么此时put和out就是null 这个时候向下执行close会引起空指针异常
修改措施: 程序加上If()语句判断
由于try catch和if的循环相互嵌套非常丑 可能会引起bug所以对程序又进行了改进
修改后的程序:
(IO流本身就实现了Closable接口所以无需担心)
缓冲区:(提高程序的效率)
由于IO操作涉及到一系列上磁盘的访问,因此IO次数越多,整体程序的效率就非常低。
BufferInputStream;
BufferOutputStream: 就内置了缓冲区
在read/write程序同样会因为异常直接返回 无法执行到下面的close()操作
修改版:
带缓冲区
不带缓冲区
经比较:带缓冲区比不带缓冲区效率高了很多(我的电脑上快了100倍) 在内存上跑真是爽
字符流字节流: