缓冲流:前面的字节流和字符流都没有使用缓冲区,这就意味着,每次的读写操作都要交给操作系统来处理。这样的做法可能会对系统的性能造成很大的影响,因为每次访问操作都可能会引发磁盘硬件的读写或网络的访问,这些磁盘硬件读写或网络访问会占用大量的资源,影响效率。缓冲流是一种装饰器
类,目的是让原字节流,字符流新增缓冲的功能。常使用BufferedInputStream或BufferedOutputStream来进行修饰。
字节流转为字符流:将一个字节流转为一个字符流,通常使用InputStreamReader或OutputStreamWriter进行转换。
数据流:简单来说就是允许字节流直接操作基本数据类型和字符串。常用DataInputStream或DataoutputStream进行转换。
演示
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;public static void main(String[] args) {
// fun1();
// fun2();
// fun3();
}//演示BufferedReaderpublic static void fun1(){BufferedReader br = null;try {//BufferedReader的参数类型为Reader类br = new BufferedReader(new FileReader("F:\\test.txt"));String str = "";while((str = br.readLine()) != null){ //BufferedReader常用的方法就是readLine,如果到了文件尾部,返回null。节点流类似的方法返回-1System.out.println(str);}System.out.println("读取完毕!");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{//关闭流if(br != null){try {br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}//演示InputStreamReaderpublic static void fun2(){//system.in为inputStream字节流,将其转为字符流BufferedReader br = null;try {//InputStreamReader的参数是InputStream类型的br = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入:");String str = br.readLine();System.out.println("输入的是:"+str);} catch (IOException e) {e.printStackTrace();}finally{//关闭流try {if(br != null){br.close();}} catch (IOException e) {e.printStackTrace();}}}//演示DataOutputStreampublic static void fun3(){DataOutputStream dos = null;try {//DataOutputStream的参数为OutputStream类型的,所以创建一个FileOutputStream对象dos = new DataOutputStream(new FileOutputStream("F:\\test1.txt"));dos.writeInt(45);dos.writeByte(0);dos.writeLong(469553L);dos.writeUTF("试一下啦");dos.writeChar('a');} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{//关闭流if(dos != null){try {dos.close();} catch (IOException e) {e.printStackTrace();}}}}