一.IO流概念原理
1.在Java程序中,对于数据的输入/输出操作以“流” (stream) 方式进行;
2。J2SDK提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据。
3.Java的流类型一般位于http://java.io包中
二.流的分类
1.流的方向
输入流:数据源流到程序(InputStream Reader读进来)
输出流:程序流到目的地(OutputStream Writer写出去)
2. 处理数据单元
字节流:按照字节读取数据(InputStream OutputStream)
字符流:按照字符读取数据(Reader Writer)
3. 功能不同
节点流:可以直接从数据源或目的地读写数据
处理流:不能直接连接到数据源或者目的地,是其他流进行封装。目的是简化操作和提高性能。
三.节点流和处理流的关系
1.节点流处于io操作的第一线,所有操作必须通过他们进行;
2.处理流可以对其他流进行处理(提高效率或操作灵活性).
四.IO流体系
1.InputStream和OutputStream
Java语言中最基本的两个字节输入输出类。其他所有字节输入输出流类都继承自这两个基类。这两个类都是抽象类,不能创建它们的实例,只能使用它们的子类.
2. Reader和Writer
Java语言中最基本的两个字符输入输出类。其他所有字符输入输出流类都继承自这两个基类。这两个类都是抽象类,不能创建它们的实例,只能使用它们的子类.
五.文件字节流
1.FileInputStream/FileOutputStream
概念:
FileInputStream通过字节的方式读取文件,适合读取所有类型的文件(图像、视频、文本文件等)。Java也提供了FileReader专门读取文本文件。
FileOutputStream 通过字节的方式写数据到文件中,适合所有类型的文件。Java也提供了FileWriter专门写入文本文件。
方法:使用FileInputStream读取文件内容
1.abstract int read( );
2.int read( byte b[ ] );
3.int read( byte b[ ], int off, int len );
4.int available( );
5.close( );
使用FileOutputStream写内容到文件
1.abstract void write( int b );
2.void write( byte b[ ] );
3.void write( byte b[ ], int off, int len );
4.void flush( );
5.void close( );
六.文件字符流Reader/Writer
为什么要使用字符流:文件字节流可以处理所有的文件,但是字节流不能很好的处理Unicode字符,经常会出现“乱码”现象。所以,我们处理文本文件,一般可以使用文件字符流,它以字符为单位进行操作
方法使用Reader读取文件内容
1.int read( );
2.int read( char [ ]cbuf );
3.int read( char [ ]cbuf, int off, int len );
4.int available( );
5.close( );
使用Writer写内容到文件
1.void write( int c );
2.void write( char[]cbuf);
3.abstract void write( char [ ]cbuf, int off, int len );
4.void write(String str);
5.abstract void flush( );
6.void close( );
七.缓冲字节流_缓冲字符流
BufferedInputStream和BufferedOutputStream是处理流(包装流)
作用:
读文件和写文件都使用了缓冲区,减少了读写次数,从而提高了效率
当创建这两个缓冲流的对象时时,会创建了内部缓冲数组,缺省使用32字节大小的缓冲区.
当读取数据时,数据按块读入缓冲区,其后的读操作则直接访问缓冲区
当写入数据时,首先写入缓冲区,当缓冲区满时,其中的数据写入所连接的输出流。使用方法flush()可以强制将缓冲区的内容全部写入输出流
关闭流的顺序和打开流的顺序相反.只要关闭高层流即可,关闭高层流其实关闭的底层节点流
Flush的使用:手动将buffer中内容写入文件
缓冲字符流
1.BufferedReader readLine() 读取一个文本行的数据
2.BufferedWriter newLine();写入一个行分隔符。
使用缓冲字符流是复制文本文件常用的方式
八.转换流InputStreamReader和OutputStreamWriter
作用:处理流 用于将字节流转化成字符流,字符流与字节流之间的桥梁
InputStreamReader的作用是把InputStream转换成Reader
OutputStreamWriter的作用是把OutputStream转换成Writer
九.打印流PrintStream与PrintWriter
特点:PrintStream
1.PrintStream提供了一系列的print()和println(),可以实现将基本数据类型格式化成字符串输出。对象类型将先调用toString(),然后输出该方法返回的字符串
2.System.out就是PrintStream的一个实例,代表显示器
3.System.err 也是PrintStream的一个实例,代表显示器
4.PrintStream的输出功能非常强大,通常需要输出文本内容,都可以将输出流包装成PrintStream后进行输出
5.PrintStream的方法都不抛出IOException
PrintReader
1.PrintStream的对应字符流,功能相同,方法对应。
2.PrintWriter的方法也不抛出IOException
3.复制文件时可以使用PrintWriter代替BufferedWriter完成,更简单
十.数据流DataInputStream和DataOutputStream
作用:数据流将“基本数据类型与字符串类型”作为数据源,从而允许程序以与机器无关的方式从底层输入输出流中操作Java基本数据类型与字符串类型。
特点:
1.提供了可以存取所有Java基础类型数据(如:int,double 等)和String的方法。
2.处理流,只针对字节流,二进制文件
3.输入流链和输出流链
注意:只要关闭上层流即可