在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()
将输出流中缓冲的数据全部写到目的地