IO流总结

来源:互联网 发布:深圳远望数码 淘宝 编辑:程序博客网 时间:2024/05/21 06:56
流、缓冲区、转换流都是流体系中的
流操作的基本规律:

通过三个明确来完成
1,明确源和目的。
   源:  输入流(读取流) InputStream、 Reader
   目的:输出流(写入流) OutputStream、Writer
2,操作的数据是否是纯文本?
   是,  字符流。
   不是,字节流。
3,当体系明确后,在明确要使用哪个具体的对象
   通过设备来进行区分:
   源设备:  内存,硬盘,键盘
   目的设备:内存,硬盘,控制台

举例:将一个纯文本文件中的数据储存到另一个文件中(复制文件)
1,源:因为是源,所以使用读取流 InputStream、Reader

   是不是操作文本?是,所以用Reader

   体系明确后,明确具体使用那个对象
   设备:硬盘,上一个文件 
   Reader体系中可以操作文本文件的对象是FileReader

代码:【是不是提高读取效率?是,使用BufferedReader缓冲区】
      FileReader fr = new FileReader("C:\\java.txt");

      BufferedReader bufr = new BufferedReader(fr);
  
2,目的:OutputStream、Writer
   是不是操作纯文本?是,所以用Writer
   设备:硬盘,上一个纯文本文件
   Writer体系中可以操作文本文件的对象是FileWriter

代码:【是不是提高读取效率?是,使用BufferedReader缓冲区】
     FileWriter fw = new FileWriter("D:\\java_copy.txt");

     BufferedWriter bufw = new BufferedWriter(fw);
以上分析完成后;
   就一顿疯狂的循环读写,完成数据的传递  bufr.readLine()  bufw.write();
最后就是关闭资源  bufr.close();  bufw.close();
   
BufferedReader有readLine()方法,读一行
BufferedWriter有newLine()方法,换行

读取转换流:字节读取流——>字符读取流对象(转换的目的是【提高数据读取效率】和【编码问题】)
InputStreamReader  是字节流通向字符流的桥梁
InputStreamReader isr = new InputStreamReader(字节读取流对象,编码表);
为了使用字符流(Reader)中的BufferedReader子类(装饰类)的readLine()方法。

写入转换流:字符写入流对象——>字节写入流对象(转换的目的是【编码问题】)
OutputStreamWriter 是字符流通向字节流的桥梁
OutputStreamWriter osw = new OutputStreamWriter(字节写入流对象,编码表);
所以记住,转换流什么时候使用,通常涉及到字符编码转换时,
需要使用到转换流。

其实,流的使用都是以字节流为核心来扩展的,字符流只是用来提高读写的效率的,而源和目的都是字节流的操作问题,
读取的是字节流,写入的如果涉及编码问题,需将字符流转为字节流,才可以设定编码表。默认的是GBK。
static PrintStream out  “标准”输出流。 【字节流】
static InputStream in   “标准”输入流。 【字节流】