本文参考自《Java高级程序设计》清华大学出版社,侵删
流:通过一定的传播路径从源传递到目的地字节序列。
输出流:基类是java.io.OutputStream ,一个抽象类,提供了一些基本的方法向流中写入数据:
public abstract void write(int b) throws IOException
将指定字节写入流(只写入传入参数的低八位)
public void write (byte[] b) throws IOException
将byte数组中的所以字节写入输出流
public void write(byte[] b, int off, int len) throws IOException
将字节数组中的指定的部分字节写入输出流。b为指定的字节数据,off为偏移量,len为写入的字节长度
public void flush() throws IOException
将输出流缓存的所有字节写向它们的预期目标
此方法只能保证将流传递给操作系统,但不能保证能正确到达目标
public void close() throws IOException
关闭此输出流,并释放占用的系统资源
输入流:基类是java.io.InputStream ,一个抽象类,提供了一些基本的方法读取流:
public abstract int read() throws IOException
从输入流中读取数据的下一个字节。返回0~255范围内的int字节值。如果到达流末尾,返回-1
public int read(byte[] b) throws IOException
将输入流中的字节存入字节数组b中,以整数形式返回实际读取的字节数
public int read(byte[] b, int off, int len) throws IOException
将输入流中读取的字节存入数组b中,读入的字节从b[off]开始存储,读取的长度为len,若输入流中的字节数小于len,则将输入流读完,最终返回读取的字节数
public long skip(long n)throws IOException
跳过输入流的n个字节,并将这些字节丢弃
public int available() throws IOException
获取输入流中可供读取或跳过的字节数
public void close() throws IOException
关闭此输入流,并释放关联的系统资源
流处理工具
输出流处理工具:Java定义了一个抽象的基类java.io.Writer,该类对write方法进行了5次重载
但是其本身不常用,这些方法多由子类覆盖重新定义,如 子类PrinterWriter
输入流处理工具:Java定义了一个抽象的基类java.io.Reader,提供了4个read方法
同上,多使用其子类来读取输入流,常用的子类:
InputStreamReader 使用指定的字符集读取输入流中的数据并将其解码为字符,通常为了提高其使用效率,还需用BufferedReader进行一次封装
BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取
通常使用该类包装那些读取开销很大的读取工具,如InputStreamReader
包装方式如下:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));