IO流
I=Input=输入
O=Output=输出
流=数据从源点传输到汇点的“管道”
流的三种分类:
按方向分: 输入流 输出流(参照物)
按单位分: 字节流 字符流
按功能分: 节点流 过滤流(包装流、处理流)
Start
InputStream: 所有字节输入流统一的父类-抽象类
int read();
int read(byte[]data);
int read(byte[]data,int off,int len);
OutpiutStream: 所有字节输出流统一的父类-抽象类
write(int data);
write(byte[]data);
write(byte[]data,int off,int len);
FileInputStream 输入流 字节流 节点流
FileOutputStream输出流 字节流 节点流
*:它们都是节点流 构造方法允许传入String路径/File对象
*:他们都是节点流 但是只能连接文件 不能连接目录
否则直接触发异常 FileNotFountException
节点流连接目录:(拒绝访问)
节点流连接不存在的文件:(系统找不到指定的文件)
*:FileOutputStream 是节点输出流
节点输出流创建对象的时候 即便连接的文件不存在也会在创建流的那一刻 自动创建 不需要手动建
其实File类有个方法叫createNewFile() 但是如果连接的目录结构都不存在 不但不建 还报异常
所以File类有个方法叫mkdirs()--->一等优先级
*:FileOutputStream 是节点输出流
节点输出流创建对象是非常可怕的 它具有极强的杀伤性
如果连接的文件已经存在 也会在创建流的那一刻 被新的空白文件直接覆盖
如果我们的需求实在原有的内容的最后追加新内容 不要覆盖
构造方法第二个参数 可以指定追加模式的开启 new FileOutputStream("a.txt",true);
*:FileInputStream 最常用的read(byte[],int,int)
*:FileOutputStream:最常用的write(byte[],int,int)
*:FileInputStream 以-1作为读取结束的标识
*:用完流请第一时间关闭 解除对文件的占用
*:必须学会使用标准的 try catch finally和TWR
BufferedInputStream: 输入流 字节流 过滤流
BufferedOutputStream 输出流 字节流 过滤流
*:作为过滤流的它们 是为了给原本的节点流添加巨大的缓冲空间
从而提高每次读写的吞吐量 进而提高效率
*:作为过滤流的它们 不能直接连接文件 只能连接其他的流
*:它们的构造方法的第二个参数 都允许指定缓冲空间大小
默认缓冲空间只有8K 8192个字节
*:BufferednputStream 最常用的是 read()
*:BufferedOutputStream 最常用的是 write(int data)
*:BufferedInputStream 同样是以-1作为读取结束的标识
*:BufferedOutputStream 是带缓冲的输出流
使用带缓冲的输出流的时候 一定注意 及时清空缓冲 防止数据滞留缓冲空间而导致丢失
1.满了自动清空 无需操作
2.关闭流的操作 会触发清空操作
3.主动调用方法清空 flush();