Java的流操作分为字节流和字符流两种。
Java的I/O流是建立在四个抽象类的基础上,分别是InputStream, OutputStream, Reader和Writer。
1、 字节流( byte stream)
对数据以字节为单位进行读写,既可以一个字节接一个字节的读写数据,也可以一次读写任意长度的字节块(即字节数组)
InputStream
(1) public abstract int read() thows IOException
方法返回一个0至255之间的整数或-1, -1代表遇到了流的结束,其它对应读入的字节.
(2) public int read(byte[]b) thows IOException
方法将字节读入参数给定的字节数组,相当于是缓冲区,返回值是实际读入的字节数或-1(遇到了流结束,。
(3) public int read(byte[]b, int off, int len) thows IOException
方法中 int off 表示读入的起始位置,int len表示读入的最大字节数.
(4) public int available()
返回当前流对象中还没有被读取的字节数量.也就是获得流中数据的长度.
(5) public long skip(long n)
跳过当前流对象中的n个字节,而实际跳过的字节数量则以返回值的方式返回.
(6) public boolean markSupported()
判断流是否支持标记(mark),标记可以方便的回到原来读过的位置.
(7) public void close()
关闭当前流对象,并释放该流对象占用的资源.
(8) public void mark(int i)
为流中当前的位置设置标志,使得以后可以从该位置继续读取.
(9) public void reset()
使流读取的位置回到设定标记的位置.
OutputStream
OutputStream类是所有输出流的父类,该类所有方法都返回void,并且在错误情况下抛出IOException,主要的方法有:
(1) public void write(int b) throws IOException
向流的末尾写入一个字节的数据.
(2) public void write(byte[] b) throws IOException
将数组b中的数据依次写入当前的流对象中.
(3) public void wirte(byte[]b, int i, int n)
将数组中从开始下标(包含),后续长度的数据依次写入到流对象中.
(4) public void close()
关闭当前流对象,并释放该流对象占用的资源.
(5) public void flush()
2. 字符流(character stream)
在读写流内数据时是以字符为单位,一次一个字符,或者一次一个字符块.
Reader
Reader类是个抽象类,该类的所有方法在错误条件下都会抛出IOException异常.常用方法如下:
(1) abstract void close():关闭输入源.
(2) void mark(int numChars):放置一个标记到输入源的当前点.
(3) boolean markSupported():如果这个流支持mark/reset方法,将返回true.
(4) int read():读取单个字符.
(5) int read(char[] buf):读字符读入到字符数组.
(6) abstract int read(char[] buf, int offset, int numChars): 将字符读入数组的某一部分.
(7) boolean ready():如果下一个输入请求不必等待,返回true,否则返回false.
(8) void reset():重置输入指针到前面设置的标记.
(9) long skip(long numChars):跳过n个字符输入,返回实际跳过的字符数.
Writer
Writer类也是个抽象类,常用方法如下:
(1) abstract void close():关闭输出流.
(2) abstract void flush():确定输出状态以便清空任何缓存.
(3) void write(int ch):写入单个字符.
(4) void write(char[] buf):写入字符数组.
(5) abstract void write(char[] buf, int offset, int numChars):写入字符数组的一部分.
(6) void write(String str):写入字符串.
(7) void write(String str, int offset, int numChars):写入字符串的一部分.