1 IO流 概述
IO流,就是
Input
与Output
IO流,主要是用来 处理设备之间的数据传输
,Java对于数据
的操作,都是通过流来实现
的。Java 用于操作 IO流的对象,都在 IO包 中。
分类:按照
操作数据
分为:字符流
和字节流
按照流向
分为:输入流
和输出流
字节流都带 Stream,字符流都不带
IO流有四个基类:
Reader Writer InputStream OutputStream
,这 4个基类都是抽象类
,我们使用的时候,需要结合具体需求,使用其子类来完成相应功能。
其子类 File File的常用方法 缓冲区 转换流 对象流 内存流 打印流 管道流
2 字符流与字节流
字符流:
1 字符流简介
字符流中的对象,融合了编码表,也就是系统默认的编码表。我们的系统一般都是
GBK
字符流只用来处理文本数据,字节流用来处理媒体数据
数据最常见的表现方式是文件
,字符流用于操作文件的子类一般是FileReader FileWriter
2 字符流读写注意事项:
1 写入文件后必须要用
flush()
刷新
2 用完流后记得要 关闭流
3 使用流对象要 抛出 IO异常
4 定义文件路径时,可以用“/”或者“\”
5 在创建一个文件时,如果目录下有同名文件将被覆盖
6 在读取文件时,必须保证该文件已存在,否则出异常
字节流
概述:
1 字节流和字符流的基本操作是相同的,但是要想操作
媒体流
就需要用到字节流
2 字节流因为操作的是字节,所以可以用来操作媒体文件。(媒体文件也是以字节存储的
)
3 字节流操作可以不用刷新流操作
4 InputStream特有方法:
int available()
;//返回 文件中的字节个数
注:可以利用此方法来指定读取方式中传入数组的长度,从而省去循环判断。但是如果文件较大,而虚拟机启动分配的默认内存一般为64M。当文件过大时,此数组长度所占内存空间就会溢出。所以,此方法慎用,当文件不大时,可以使用。
字节流与字符流的区别
字节流在操作的时候本身是不会用到缓冲区(内存)的,是
与文件本身直接操作
的,而字符流在操作的时候是使用到缓冲区的
字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区
,并且可以使用flush()方法强制进行刷新缓冲区
,这时才能在不close的情况下输出内容
那开发中究竟用字节流好还是用字符流好呢?
在所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用
字节的操作是最多的
如果要java程序实现一个拷贝功能,应该选用字节流进行操作(可能拷贝的是图片),并且采用边读边写的方式(节省内存)