IO流

一.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.输入流链和输出流链

注意:只要关闭上层流即可

你可能感兴趣的:(IO流)