流的概念java
Java程序经过流来完成输入/输出。流是生产或消费信息的抽象。流经过Java的输入/输出系统与物理设备连接。尽管与它们连接的物理设备不尽相同,全部流的行为具备一样的方式。这样,相同的输入/输出类和方法适用于全部类型的外部设备。这意味着一个输入流可以抽象多种不一样类型的输入:从磁盘文件,从键盘或从网络套接字。一样,一个输出流能够输出到控制台,磁盘文件或相连的网络。流是处理输入/输出的一个洁净的方法,例如它不须要代码理解键盘和网络的不一样。Java中流的实现是在java.io包定义的类层次结构内部的。网络
输入/输出流编码
输入/输出时,数据在通讯通道中流动。所谓“数据流(stream)”指的是全部数据通讯通道之中,数据的起点和终点。信息的通道就是一个数据流。只要是数据从一个地方“流”到另一个地方,这种数据流动的通道均可以称为数据流。输入/输出是相对于程序来讲的。程序在使用数据时所扮演的角色有两个:一个是源,一个是目的。若程序是数据流的源,即数据的提供者,这个数据流对程序来讲就是一个“输出数据流”(数据从程序流出)。若程序是数据流的终点,这个数据流对程序而言就是一个“输入数据流”(数据从程序外流向程序)spa
流的分类orm
在java.io包中提供了60多个类(流)。对象
从功能上分为两大类:输入流(Input Stream)和输出流(Output Stream)。可从中读出一系列字节的对象称为输入流。而能向其中写入一系列字节的对象称为输出流。内存
从流结构上可分为字节流(以字节为处理单位或称面向字节)和字符流(以字符为处理单位或称面向字符)。it
字节流的输入流和输出流基础是InputStream和OutputStream这两个抽象类,字节流的输入输出操做由这两个类的子类实现。字符流是Java1.1版后新增长的以字符为单位进行输入输出io
处理的流,字符流输入输出的基础是抽象类Reader和Writer。form
节点流:从特定的地方读写的流类,例如:磁盘或一块内存区域。
过滤流:使用节点流做为输入或输出。过滤流是使用一个已经存在的输入流或输出流链接建立的。
字节流/字符流
Java 2 定义了两种类型的流:字节流和字符流。字节流(byte stream)为处理字节的输入和输出提供了方便的方法。例如使用字节流读取或写入二进制数据。字符流(character stream)为字符的输入和输出处理提供了方便。它们采用了统一的编码标准,于是能够国际化。固然,在某些场合,字符流比字节流更有效
Java的原始版本(Java 1.0)不包括字符流,所以全部的输入和输出都是以字节为单位的。Java 1.1中加入了字符流的功能
须要声明:在最底层,全部的输入/输出都是字节形式的。基于字符的流只为处理字符提供方便有效的方法
字节流类(Byte Streams)字节流类用于向字节流读写8位二进制的字节。通常地,字节流类主要用于读写诸如图象或声音等的二进制数据。
字符流类(Character Streams)字符流类用于向字符流读写16位二进制字符。
读数据的逻辑为:
open a stream
while more information
read information
close the stream
写数据的逻辑为:
open a stream
while more information
write information
close the stream