IO总结(一)

来源:互联网 发布:js防水贴瓷砖 编辑:程序博客网 时间:2024/05/22 13:46

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


可以把“流”想象成“自来水流”、“管道”,文件--“自来水池”,程序--“水桶”,自来水中有杂质,就需要两个(或以上)“管道”。

输入/输出流的分类

1)按数据流的方向不同:输入流和输出流

2)按处理数据单位不同:字节流和字符流

3)按功能不同:节点流和处理流

J2SDK所提供的所有流类型为与java.io内都分别继承自以下四种抽象流类型:


节点流和处理流:

1)节点流为可以从一个特定的数据源(节点)读写数据(如文本,内存)



2)处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。



InputStream

 继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8bit);下图中深色为节点流,浅色为处理流。


FileInputStream: 从文件读数据

PipedInputStream:从管道读数据

......


InputStream的基本方法

1)int read() throws IOException

读取一个字节并以整数的形式返回

如果返回-1已到输入流的末尾

2)  int read(byte[] buffer) throws IOException

读取一系列字节并存储到一个数组buffer

返回实际读取的字节数

3)  int read(byte[] buffer,int offset,int length) 

读取length个字节

并存储到一个字节数组buffer,从length位置开始

返回实际读取的字节数

4)  void close()

关闭流释放内存资源

5)  long skip(long n) 


OutputStream

继承自OutputStream的流是用于程序中输入数据,且数据的单位为字节;下图中深色为节点流,浅色为处理流。




OutputStream的基本方法

1)void write(int b)

向输出流中写入一个字节数据,该字节数据位参数b的低8位

2)void write(byte[] b)

将一个字节类型的数组中的数据写入输出流

3)void write(byte[] b,int off,int len)

将一个字节类型的数组中的从指定位置(off)开始的len个字节写入到输出流

4)void close()

关闭流释放内存资源

5)void flush()

将输出流中缓冲的数据全部写出到目的地


Reader

继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符(16 bit);下图中深色为节点流,浅色为处理流。



Reader的基本方法

1)int read()

2)   int read(char[] cbuf)

3)   int read(char[] cbuf,int offset,int length)

4)    void close()

5) long skip(long n)


Writer

继承自Writerr的流都是用于程序中输出数据,且数据的单位为字符(16 bit);下图中深色为节点流,浅色为处理流。




Writer的基本方法:

1) void write(int c)

向输出流中写入一个字符数据

2)   void  write(char[] cbuf)

将一个字符类型的数组中的数据写入输出流

3)void write(char[] cbuf,int offset,int length)

将一个字符类型的数组中的从指定位置开始的length个字符写入到输出流

4)void write(String string) (重要)

将一个字符串中的字符写入到输出流

5) void write(String string,int offset, int length)

将一个字符串从offset开始的length个字符写入到输出流

6)void close()

关闭流释放内存资源

7)void flush()

将输出流中缓冲的数据全部写到目的地