1.io流定义
存储(output)和读取(input)数据的解决方案。(以程序为视角)
2.io流体系

纯文本文件指能用windous自带的记事本打开的文件

字节输出流(FileOutputStream)步骤和细节
1.第一步相当于在两座山之间架起了一座高桥
2.第二步相当于有一辆车从一座山开到了另一座山
3.第三步相当于把这座桥给打碎了

1.步骤2中write每次只能输入单个字符
2.步骤1细节3中清空的实质是创建一个新的对象覆盖了原对象
3.步骤3实质是停止了程序对文件的占用
如果要一次写入多个字母,要将内容写在byte【】数组中,向write中传递数组来一次写入多个字母。同时有方法可以决定传入数组的开头和距离。

传递字符串的做法

换行和续写
1.换行
将换行符( \r\n)直接写出,java中对此有便利,只写(\n)或(\r)java会自动补全。

2.续写(write函数直接使用会覆盖原本的内容)
原因:FileOutputStream的源代码有一个append(加入)开关,默认为false,要手动改为true

字节输入流(FileInputStream)的步骤与细节
步骤和输出流差不多,只是第二步从写改为了读
1.read函数原函数里面相当于有一个迭代器,开始时有一个指针,使用一次,指针就往右走一次。
所以一个程序里面一般只有一个read函数,避免指针多次移动,遍历有遗漏。
2.read一次制度一个字符,返回字符的ascll值,要打印原字符需要(char)强转。read读到文件末尾会返回(-1).
3.如果FileInputStream创建的时候文件不存在,直接报错不会自动生成
4.要一次性读完文件内的内容,可以while循环,循环条件是read返回值不为(-1)
小文件拷贝

int 一个变量循环接收read的读到的数字,再一个一个写入另一个文件中
大文件拷贝(改进文件传输慢的问题)
文件传输的原理

为了加快文件传输速度,read一次可以接受一个byte数组的长度的内容


read到的内容会传进数组之中,raed(bytes)返回接受的数据的数量,数组会尽可能多的接收数据


每次read到的内容实际上会覆盖原来的内容,这会导致数据重复错误存在。为了解决它,可以用read中确定接收开始索引与长度构造
