Java IO流
一 流的概念
流(Stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程的通信,或读写外围设备、外部文件等。
一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。
流的方向是重要的,根据流的方向,流可以分为2类:输入流和输出流。用户可以从输入流中读取信息,但不能写它。相反,对输出流,只能往输入流写,但不能读它。
实际上,流的源端和目的端可简单的看成是字节的生产者和消费者,对输入流,可不必关心它的源端是什么,只要简单地从流中读取数据,而对输出流,也可不知道它的目的端,只是简单的往流中写数据。
二 流的三种分类方式
1.按流的方向分为:输入流和输出流
2.按流的数据单位不同分为:字节流和字符流
3.按流的功能不同分为:节点流和处理流
三 流的层次结构



四 缓冲流 :
缓冲流要套接在相应的节点流觞,提高了读写的效率。
此处理流的构造方法都得传相对应的基类类型
BufferedReader:提供了readLine方法,用于高效读取一行字符串
BufferedWriter: 提供了newLine用于写入一个行分隔符也就是换行
五 转换流:主要作用将字节流转换成字符流。
InputStreamReader 需要和InputStream套接
OutputStreamWriter 需要和OutputStream套接
eg: InputStremReader input=new InputStreamReader(new FileInputStream(...));
六 流的结构:
根接口:InputStream/OutputStream
充当数据源的IO类有FileInputStream/FileOutputStream,ByteArrayInputStream/ByteArrayOutputStream等。
充当装饰功能的IO类 BufferedInputStream/BufferedOutputStream,DataInputStream/DataOutputStream等。
它们都是继承装饰接口FilterInputStream/FilterOutputStream.
使用IO时,首先创建一个数据源IO,然后根据需要的功能创建装饰类IO,其构造函数的参数为以创建的数据源IO
eg:
我们以创建一个具有缓冲的文件输入流为例,假定需要从磁盘读取文件“C:\log.txt”:
// 创建一个FileInputStream:
FileInputStream fileInput = new FileInputStream(”C:\\log.txt”);
// 创建一个BufferedInputStream:
BufferedInputStream bufferedInput = new BufferedInputStream(fileInput);
// 现在得到的bufferedInput即是具有缓冲的文件输入流
或者进一步简写如下:
InputStream input = new BufferedInputStream(new FileInputStream(”C:\\log.txt”));
// 现在得到的input即是具有缓冲的文件输入流
java.io.Reader 和 java.io.InputStream 区别
java.io.Reader 和 java.io.InputStream 组成了 Java 输入类。Reader 用于读入16位字符,也就是 Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。
在 Java 中,有不同类型的 Reader 输入流对应于不同的数据源:
FileReader 用于从文件输入;
CharArrayReader 用于从程序中的字符数组输入;
StringReader 用于从程序中的字符串输入;
PipedReader 用于读取从另一个线程中的 PipedWriter 写入管道的数据。
相应的也有不同类型的 InputStream 输入流对应于不同的数据源:
FileInputStream,ByteArrayInputStream,StringBufferInputStream,PipedInputStream。另外,还有两种没有对应 Reader 类型的 InputStream 输入流:

浙公网安备 33010602011771号