IO操作的类在包java.io里
一、字节字符流(节点流)
InputStream用于向程序中输入数据,且单位为一个字节(8bit)
OutputStream用于向程序中输出数据,且单位为一个字节
Reader用于向程序中输入数据,单位为一个字符(两个字节16bit)
Writer用于向输出流中写入数据,单位为一个字符(两个字节16bit)
FileInputStream用于从文件中输入字节
FileOutputStream用于向文件中输出字节
FileReader与FileWriter是文件中输入输出字符
二、处理流。处理流要套接到相应的节点流上,提高了效率,增加了新的方法
1、缓冲流
BufferedInputStream, BufferedOutputStream,
BufferedReader, BufferedWriter
BufferedReader的readLine方法:
readLine
public String readLine()
throws IOException
读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
返回:包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
抛出:IOException
- 如果发生 I/O 错误
三、转换流
InputStreamReader、OutputStreamWriter
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的
读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。charset
每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。
为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。实际效果和直接使用InputStreamReader是一样的
四、数据流
DataInputStream, DataOutputStream
需要套接在字节节点流上面,提供了存取基本数据类型的方法
五、打印流
只有输出,PrintStream打印字节流,PrintWriter打印字符流
六、Object流
直接将整个object写入或者读出
继承Serializable接口可以序列化,且不用重写接口的方法(标记性接口)
关键字transient修饰成员变量 ,在序列化时不予考虑,读出来是默认值
比如transient int k 读出来是0