您的位置:首页 > 编程语言 > Java开发

Java的IO流

2016-02-27 13:50 363 查看
IO流是用来处理数据传输。Java对数据的操作是通过流的方式。

流的特性:

先进先出,最先写入输出流的数据最先被输入流读取到。

顺序存取,可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据。

只读或只写,每个流只能是输入流或输出流的一种,不能同时具备两个功能,在一个数据传输通道中,如果既要写入数据,又要读取数据,则要分别提供两个流。

1.在Java中,IO流的分类:

(1)根据方向分:输入流(I)和输出流(O);

(2)根据单位分:字节流(byte)和字符流(char);

(3)根据功能(有无数据源)分:节点流(有)和处理流(无)。

2.在Java中,四个抽象的IO类:

(1)抽象的字节输入流:InputStream;

(2)抽象的字节输出流:OutputStream;

(3)抽象的字符输入流:Reader;

(4)抽象哦字符输出流:Writer;

IO流的类都放在java.io.*包中。

字节流:

3、抽象的字节输入流类: InputStream,其特性如下:

1) 它以字节方式来读取数据。

2) 它提供的常用方法如下:

int read();

它用来读取一个字节,反馈该字节对应的整数,其范围是[0, 255]。

void close();

关闭输入流。

3) 它针对文件操作的子类有:

FileInputStream文件的字节输入流类

4、FileInputStream 文件的字节输入流类,其特性如下:

1) 它以字节方式来读取数据(文件的内容)。

2) 它提供的常用方法如下:

int read();

它用来读取一个字节,反馈该字节对应的整数,其范围是[0, 255]。若读取完毕,则反馈一个 -1。

void close();

关闭输入流,释放所占资源,确保数据源的安全。

5、抽象的字节输出流类: OutputStream 的特性如下:

1) 它用来将给定的数据以字节方式输出。

2) 它提供的常用方法:

void write(int x); 将给定的整数以字节方式输出。

void flush(); 将缓冲区的数据一次性输出,确保输出成功!

void close(); 关闭输出流。

3) 它针对文件操作的子类有: FileOutputStream 文件的字节输出流类。

6、FileOutputStream文件的字节输出流类,其特性如下:

1) 它用来将给定的整数以字节方式输出。

2) 它提供的常用方法:

void write(int x); 将给定的整数以字节方式输出。因此,当给定的整数超出了[0, 255]时,则会失真。

void flush(); 将缓冲区的数据一次性输出,确保输出成功!

void close(); 关闭输出流,释放所占资源,确保输出成功。

字符流

1、抽象的字符输入流类: Reader

1) 它以字符的方式来读取数据。

2) 它的常用方法:

int read(); 用来读取一个字符,反馈该字符对应的整数。

void close(); 用来关闭输入流。

3) 它针对文件操作的子类: FileReader.

2、FileReader 文件的字符输入流类,其特性如下:

1) 它以字符方式来读取文件的内容。

2) 它的常用方法:

int read(); 用来读取文件中的一个字符,反馈该字符对应的整数,其范围是[0, 65535]。当它反馈一个-1时,则表示结束了。

void close(); 用来关闭输入流,释放所占资源,确保文件的安全。

3、抽象的字符输出流类 : Writer

1) 它将给定的整数以字符方式输出。

2) 它的常用方法:

void write( int x ); 将给定的整数以字符方式输出。

void flush(); 将缓冲区中的数据一次性输出,

void close(); 关闭输出流。

3) 它针对文件操作的子类有: FileWriter

4、FileWriter文件的字符输出流类,其特性如下:

1) 它用来将给定的整数以字符方式输出到文件中。

2) 它的常用方法:

void write(int x); 将给定的整数以字符方式输出到文件中。

void flush(); 将缓冲区中的数据一次性输出,确保输出成功。

void close(); 关闭输出流,释放所占资源,确保存盘成功。

缓冲区

1、在Java中,为了提高输入输出流的速度,从而提供了缓冲流类。

1) BufferedInputStream 和 BufferedOutputStream 。

缓冲的字节输入流类和缓冲的字节输出流。

2) BufferdReader 和 BufferedWriter

缓冲的字符输入流类和缓冲的字符输出流。

3) 缓冲流属性处理流,因此,在使用它们时必须将其套接在节点流。

BufferedInputStream 和 BufferedOutputStream , 这一对缓冲的字节输入、输出流往往套接在 FileInputStream 和 FileOutputStream 上。

BufferdReader 和 BufferedWriter ,这一对缓冲的字符输入、输出流往往套接在 FileReader 和 FileWriter 上。

目的: 提高 文件的读取和存盘的速度 。

缓冲流

为了提高数据的传输效率,引入了缓冲流(Buffered Stream)的概念,即为一个流配备一个缓冲区(Buffer),一个缓冲区就是专门用于传送数据的一块内存。

当向一个缓冲流写入数据时,系统将数据发送到缓冲区,而不是直接发送到外部设备。缓冲区自动记录数据,当缓冲区满时,系统将数据全部发送到相应的外部设备。当从一个缓冲流中读取数据时,系统实际是从缓冲区中读取数据,当缓冲区为空时,系统就会从相关外部设备自动读取数据,并读取尽可能多的数据填满缓冲区。 使用数据流来处理输入输出的目的是使程序的输入输出操作独立于相关设备,由于程序不需关注具体设备实现的细节(具体细节由系统处理),所以对于各种输入输出设备,只要针对流做处理即可,不需修改源程序,从而增强了程序的可移植性。

OutputStreamWriter:
OutputStreamWriter是字符流通向字节流的桥梁:使用指定的 charset 将要向其写入的字符编码为字节。它使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集。 每次调用 write() 方法都会针对给定的字符(或字符集)调用编码转换器。在写入基础输出流之前,得到的这些字节会在缓冲区累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。为了达到最高效率,可考虑将 OutputStreamWriter 包装到
BufferedWriter 中以避免频繁调用转换器。例如:

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));

InputStreamReader:

InputStreamReader是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。每次调用其一个 read() 方法都会导致从基础输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从基础流读取更多的字节,使其超过满足当前读取操作所需的字节。为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如: BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: