(一)java流式输入输出原理

在java程序中,对于数据的输入输出操作以“流(stream)”方式进行;提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据。

(二)输入输出流的分类

Java.io包中定义了多个流类型(类或抽象类)来实现输入输出功能,可以从不同角度对其进行分类;

按照数据流的方向不同可以分为输入流和输出流;

按处理数据单位的不同可以分为字节流和字符流;

按照功能不同可以分为节点流和处理流。

提供的所有流类型位于包java.io内部分别继承自四种抽象流类型

字节流                       字符流
输入流         InputStream                  Reader  
输出流         OutputStream               Writer
《1》节点流和处理流
节点流为可以从一个特定的数据源(节点)读写数据(如:文件,内存)
处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能
《2》InputStream
继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8位);
InputStream流有FileInputStream,PipeInputStream,FilterInputStream,ByteArrayInputStream,SequenceInputStream,StringBufferInputStream,ObjectInputStream,其中ObjectInputStream,SequenceInputStream,FilterInputStream为处理流,其他为节点流。
InputStream的基本方法:
int read() throws IOException:读取一个字节并以整数的形式返回(0~255),如果返回-1已到输入流的末尾;
int read(byte[ ] buffer) throws IOException:读取一系列字节并存储到一个数组buffer,返回实际读取的字节数,如果读取前已经到输入流的末尾返回-1;
int read(byte[ ] buffer,int offset, int length) throws IOException:读取length个字节,并存储到一个字节数组buffer,从length位置开始,返回实际读取的字节数,如果读取前已到输入流的末尾返回-1;
void close() throws IOException:关闭流释放内存资源;
long skip(long n) throws IOException:跳过n个字节不读,返回实际跳过的字节数。
OutputStream的基本方法:
void write(int b) throws IOException:向输出流中写入一个字节数据,该字节数据为参数b的低8位;
void write(byte[ ] b) throws IOException:讲一个字节类型的数组中的数据写入输出流;
void write(bute[ ] b,int off,int len) throws IOException:将一个字节类型的数组中的从指定位置(off)开始的len个字节写入到输出流;
void close() throws IOException:关闭流释放内存资源;
void flush() throws IOException:将输出流中缓冲的数据全部写出到目的地