java基础之IO

流就是从一个目的将数据传送到另一个目的,通常传送的地点有以下这些:内存,硬盘,控制台,键盘,套接字网口

IO流分为字节流和字符流。

一、字符流分为Reader(输入流,表示读入)和Writer(输出流,表示写出)

字符流其实底层还是字节传输,只是将若干个字节缓冲存储然后去查找字符映射表(简称码表),对应码表转换成对应的字符。

字符流按照功能能,常用的有以下:

FileReader 读取文件

FileWriter 写出到文件

java基础之IO

字符流的缓冲区技术,提高效率

BufferedReader

BufferedWriter

java基础之IO

缓冲流实际上是装饰设计模块的一种实现。

当想要对自己已为的对象进行功能增强时,可以定义类,将已为对象传入,基于已有的功能,并提供加强功能!那么自定义的该类就称为装饰类。

装饰类与继承的区别:如果使用继承,将会每个类增加一个子类,使得整个类的体系非常臃肿,而使用装饰模式后,只有对原来的类进行装饰就可

以,而不用增加很多子类。如下面的两个体系,显然右边的更优:

java基础之IOjava基础之IO

二、节字流

InputStream //字节输入流

OutputStrem //字节输出流

FileInputStream //读入字节 字节是最小的传输单位,中间不需要缓冲,所以不需要刷新,不用调用flush

FileOutputStream //写出字节

例子,使用字节流拷贝一个图片:

java基础之IO

字符流与字节流的桥梁,转换流

InputStreamReader //字节流----->字符流 由于字节流没有对应的缓冲流,所以为了使用到缓冲流提高效率,就要将数据转换成字符流。键盘录入System.in是节字流,通常

使用转换流提高效率。

InputStreamWriter //字符流------->字节流

BufferedReader bufr = new BufferedReder(new InputStreamReader(System.in));

BufferedWriter bufw = new BufferedWriter(new OutputStreamReader(System.out));

java基础之IO

其他有用的流:打印流 PrintStream, PrintWriter