I 即Input 输入
O 即 output 输出
流(Stream):数据从原点流向汇点的过程
IO流主要有三种分类标准:方向,单位,功能
按照方向分为两种
输入流
输出流
注意:方向是根据参照物来选择的,一般的参照物就是目前我们正在编写的程序m
按照单位分为两种
字节流
字符流
按照功能分为两种
节点流
过滤流(处理流,包装流)
InputStream
含义:抽象类,所有输入流的父类
方法:
read(); 返回类型:int
read(byte[] data); 返回类型: int
read(byte[] data,int offset,int len); 返回类型:int
OutputStream
含义:抽象类,所有输入流的父类
方法:
write();
write(byte[] data);
write(byte[] data,int offset,int len)
FileInputStream
含义:输入流,字节流,节点流
常用方法:read(byte[] data); 返回类型:int
结束标志:当返回-1时,结束文件读取
注意:
1.作为节点流,可以直接连接File文件或者String类型的目录,不能够连接目录,否则会触发异常FileNotFoundException 拒绝访问
2.学会使用twr来配合使用
3.记得关流
FileOutPutStream
含义:输出流,字节流,节点流
常用方法:write(byte[] data,int offset,int len);
结束方式:当返回-1时,结束文件写操作
注意:
1.作为节点流,可以连接还未创建的文件,但是如果连接的是未创建目录下的未创建的文件,则会报异常 FileNotFoundException 未找到指定路径
2.FileOutPutStream具有很强的“杀伤性”,如果连接的是已经存在的文件,则如果是文件复制的话,会直接覆盖掉之前存在的文件内容,如果想要不覆盖,在该文件的后面继续添加内容的话,则可以这样实现:new FileOutPutStream(“目标文件”,true); 表示追加
BufferedInputStream
含义:输入流,字节流,过滤流 表示给节点流添加缓存空间
常用方法:read(); 返回类型:int
结束标志:返回值是-1的时候,表示文件读取结束
注意:
1.作为过滤流不能之间连接文件,只能连接其他流
2.它的构造方法有第二个参数,程序员可以自定义缓存空间的大小,默认是8k
3.注意使用twr方法
4.使用完毕记得关流
BufferedOutputStream
含义:输出流,字节流,过滤流
常用方法:write(byte[] data,0,int len);
结束标志:返回值是-1的时候,表示文件写操作结束
注意:
在完成写操作之后,一定要记得清空缓存空间,负责就会造成数据遗留在缓存空间里,有三种清理缓存空间的方法:
1.关闭流,调用.close()操作则会清理缓存空间
2.当缓存空间满了之后,则会自动清理
3.调用.flush();方法清除缓存空间
DataInputStream
含义:输入流,字节流,过滤流。给节点流添加读基本数据类型的能力
常用方法:readXxx(); 返回类型:Xxx 即八种基本数据类型中的一个
结束标志:不再以-1作为标准,则如果还想要读取文件,则会造成EOFException异常
DataOutputStream
含义:输出流,字节流,过滤流。给节点流添加写基本数据类型的能力
常用方法:writeXxx(Xxx);
结束标志:不再以-1为标准,同上
ObjectInputStream
含义:输入流,字节流,过滤流 给节点流添加读对象的能力
常用方法:readObject(); 返回一个Object类型的对象
结束标志:不再以-1为结束标准
ObjectOutputStream
含义:输出流,字节流,过滤流 给节点流添加写对象的能力
常用方法:writeObject(Object对象);
结束标志:不再以-1为结束标准
注意:对象一定要具有持有化能力,想要实现持有化,必须实现序列化,即创建的类需要implements serializable,或者如果有的属性可用,可不用,则可以用 transient来修饰
如果传入ObjectInputStream/ObjectOutputStream的是集合对象的话,需要集合中的所有对象全部都实现序列化