因为input/ouput是对称的,故只介绍其一 ===== 字节流 ===== * OutputStream 抽象类 * void write(int b)往流中写一个字节b * void write(byte b[])往流中写一个字节数组b * void write(byte b[],int off,int len)把字节数组b中从下标off开始,长度为len的字节 * FileOutputStream 继承自OutputStream * 按字节操作,直接写入磁盘,没有缓冲,效率极低。 * FileOutputStream dos = new FileOutputStream("file_path") * void write(int b)往流中写一个字节b * void write(byte b[])往流中写一个字节数组b * void write(byte b[],int off,int len)把字节数组b中从下标off开始,长度为len的字节 * DataOutputStream 继承自FilterOutputStream,对类型数据(int,float,double等)再一次做了封装 * 按类型操作,直接写入磁盘,没有缓冲,效率比FileOutputStream稍高(按类型比按字节每次会多 操作几个字节) * DataOutputStream dos = new DataOutputStream(new FileOutputStream("file_path")) * void writeInt(int a) * void writeFloat(float f) * BufferedOutputStream 【【**常用**】】继承自FilterOutputStream * write方法FileOutputStream类似,但是不会每次写出缓冲区,而是等缓冲区满了一次写出, 对大文件效率非常高 * BufferedOutputStream dos = new BufferedOutputStream(new FileOutputStream("file_path")) * void write(int b)往流中写一个字节b * void write(byte b[])往流中写一个字节数组b * void write(byte b[],int off,int len)把字节数组b中从下标off开始,长度为len的字节 ==== 效率对比 ==== **从应用程序把内容写入文件中,相当于把水从一个水缸倒到另一个水缸中** * FileOutputStream:write()一滴一滴的倒 * FileOutputStream dos = new FileOutputStream("file_path") * DataOutputStream:writeXxx()一瓢一瓢的倒 * DataOutputStream dos = new DataOutputStream(new FileOutputStream("file_path")) * BufferedOutputStream:write()先一瓢一瓢倒到一个桶里,再从桶里倒到缸里 * BufferedOutputStream dos = new BufferedOutputStream(new FileOutputStream("file_path")) ===== 字符流 ===== * Reader:(抽象类)一次读取一个字符 * Writer: (抽象类)一次写入一个字符 * InputStreamReader:完成byte流到char流,按编码解析 * InputStreamReader i = new InputStreamReader(new FileInputStream(""),"utf-8");要给出当前文件编码,默认是项目编码 * OutputStreamReader:完成char流到byte流,按编码解析 * void write(int b)往流中写一个字符 * void write(char b[])往流中写一个字符数组b * void write(char b[],int off,int len)把字符数组b中从下标off开始,长度为len的字节 * FileReader 貌似和InputStreamReader 效果一样, 而且不能指定文件编码 * BufferedReader 【【**常用**】】 * BufferedReader i = new BufferedReader(new InputStreamReader(new FileInputStream(""))); * i.readLine(); # 读取一行 * PrintWriter 【【**常用**】】 一般和BufferedReader一起用。BufferedReader读,PrintWriter写(PrintWriter比 BufferedWriter 操作方便一些) * 初始化的时候可以设置autoFlush * 写入时使用print(String),println(String)函数即可 * PrintWriter i = new PrintWriter(""); * i.print("hello"); * i.println("world");