一、 流的概念
Java程序通过流来完成输入/输出。流是生产或消费信息的抽象。流通过Java的输入/输出系统与物理设备连接。尽管与它们连接的物理设备都不尽相同,但是所有流的行为具有同样的方式。因此,同样的输入/输出类和方法适用于所有类型的外部设备。这就意味着一个输入流能够抽象多种不同类型的输入:从磁盘文件,从键盘或从网络套接字。同样,一个输出流可以输出到控制台,磁盘文件或相连的网络。流是处理输入/输出的一个纯净的方法,例如它不需要代码理解键盘和网络的区别。Java中流的实现是在java.io包定义的层次结构内部的。
二、 输入/输出流概念
1、 输入输出时,数据在通信通道中流动。所谓“数据流(Stream)”指的是所有数据通信通道之中,数据的起点和终点。信息的通道就是一个数据流。只要是数据从一个地方“流”到另一个地方,这种数据流动的通道都可以称为数据流。
2、 输入/输出是相对于程序来说的。程序在使用数据时所扮演的角色有两个:一个是源,一个是目的地。若程序是数据流的源,即数据的提供者,这个数据流对于程序来说就是一个“输出数据流”(数据从程序流出)。若程序是数据流的终点,这个数据流对程序而言就是一个“输入数据流”(数据从程序外流向程序)。
三、 输入/输出类
1、 在java.io包中提供了60多个类(流)。
2、 从功能上分为两大类:输入流和输出流。
3、从流结构上可分为字节流(以字节为处理单位或称为面向字节)和字符流(以字符为处理单位或称为面向字符)。
四、字节流和字符流
1、 字节流的输入流和输出流基础是InputStream和OutputStream这两个抽象类,字节流的输入输出操作由这两个类的子类实现。字符流是Java1.1版后新增加的以字符为单位进行输入输出处理的流,字符流的输入输出基础是抽象类Reader和Writer。
2、 Java 2 之前只有字节流,Java 2 中定义了字符流。字节流(byte stream)为处理字节的输入和输出提供了方便。例如使用字节流读取或写入二进制数据。字符流(character stream)为字符的输入和输出提供了方便。它们采用了统一的编码标准,因而可以国际化。当然在某些场合,字符流比字节流更有效。
3、需要注意的是:在Java的最底层,所有的输入/输出都是字节形式的。基于字符的流只是为了处理字符提供方便有效的方法。
4、字节流类用于向字节流读写8位二进制的字节;字符流类用于想字符流读写16位二进制字符。
五、 流的分类
- 第一种划分方法 两种基本的流是:输入流(Input Stream)和输出流(Output Stream)。可从中读出一系列字节的对象称为输入流。而能向其中写入一系列字节的对象称为输出流。
1、输入流
读数据的逻辑为
open a stream
while more information
read information
close the stream //一定要记住关闭流
2、输出流
写数据的逻辑为
open a stream
while more information
write information
close the stream //一定要记住关闭流
-
第二种划分方法
节点流:从特定的地方读写的流类,例如:此案或一块内存区域。
过滤流:使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或输出流连接创建的。
image.png
网友评论