黑马程序员技术交流社区

标题: IO流。。。。。 [打印本页]

作者: zzwzz    时间: 2015-10-28 22:18
标题: IO流。。。。。

常见流与对象

文件类:       File

打印流           PrintStream    PrintWriter

管道流           PipInputteStream    PipeOutputStream

序列流           SequenceInputStream

对象序列化流       ObjectInputStream ObjectOutputStream

IO流:用于处理设备上的文件

设备:硬盘,内存,键盘录入

IO分类:

1、  根据处理的数据类型不同:字节流和字符流

2、  根据流向不同:输出流和输入流

字符流的由来:因为文件编码的不同,而有了对字符进行高效的字符流对象

原理:其实就是基于字节流去读取字节时,去查了指定的码表。

字节流和字符流的区别:

1、  字节流读取的时候,读到一个字节就返回一个字节。

字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时。先去查指定的编码表,将查到的字符返回。

2、  字节流可以处理所有类型的数据,如图片, mp3, avi。

而字符流只能处理字符数据。

结论:如果只是处理纯文本数据,就要优先考虑使用字符流,除此之外都要使用字节流。

IO体系

1、  字节流

InputStream(读), OutputStream(写)

2、  字符流

Reader(读), Writer(写)

基本的读写操作:

       通常数据都是以文件形式存在

所以就要找到IO体系中可以用于操作文件的流对象

通过名称可以更容易获取该对象。

Reader

       |---InputStreamReader

              |---FileReader:专门用于处理文件的字符读取流对象

Write

       |---OutputStreamWriter

              |--FileWriter:专门用于处理文件的字符写入流对象

字符流的缓冲区:

       为什么要缓冲区:提高对流的操作效率

       原理:其实就是对数组进行封装

对应的对象:

BufferedWriter

       特有方法:

                     newline():跨平台的换行符

BufferedReader

       特有方法:

                     ReadLine():一次读一行,到行标记时,将行标之前的字符数据作为字符型返回。读到末尾时,返回null。

在使用缓冲区对象时,要明确,缓冲的存在是为了增强流的功能而存在,因此在建立缓冲区对象时,要先有流对象存在。

其实缓冲内部就是在使用流对象的方法,只不过加入了数组对数据进行了临时存储。为了提高操作数据的效率。

代码上的体现:

       写入缓冲区对象。

       //建立缓冲区对象必须把流对象作为参数传递给缓冲区的构造方法。

如:

       BufferedWrite bufw = new BufferedWrite (new FileWriter(“Demo.txt”));

Bufw.write(“abcdefg”);         //将数据写入缓冲区

Bufw.flush();                       //对缓冲区的数据进行刷新,将数据刷到目的地中。

Bufw.close();                       //关闭缓冲区,其实关闭的是被包装在内部的流对象。

//读取缓冲对象

BufferedReader bufr = new BufferedReader (new FileReader(“Demo.txt”));

String line = null;

//按照行的形式取出数据。取出的每一行数据不包含回车符。

while ((line = bufr.readLine()) != null)

{

       System.out.println (line);

}

bufr.close();

例:通过缓冲区的形式,对文本文件进行拷贝

import java.io.*;

public class Demo3

{

       public static void main (String[] args) throws IOException

       {

              BufferedReader bufr = new BufferedReader(new FileReader("Demo.txt"));

              BufferedWriter bufw = new BufferedWriter(new FileWriter("mo.txt"));            

              String line = null;            

              while ((line = bufr.readLine()) != null)

              {

                     bufw.write(line);

                     bufw.newLine();

                     bufw.flush();

              }            

              bufw.close();

              bufr.close();

       }

}




作者: zzwzz    时间: 2015-10-28 22:19
  1. 代码上的体现:

  2.        写入缓冲区对象。

  3.        //建立缓冲区对象必须把流对象作为参数传递给缓冲区的构造方法。

  4. 如:

  5.        BufferedWrite bufw = new BufferedWrite (new FileWriter(“Demo.txt”));

  6. Bufw.write(“abcdefg”);         //将数据写入缓冲区

  7. Bufw.flush();                       //对缓冲区的数据进行刷新,将数据刷到目的地中。

  8. Bufw.close();                       //关闭缓冲区,其实关闭的是被包装在内部的流对象。



  9. //读取缓冲对象

  10. BufferedReader bufr = new BufferedReader (new FileReader(“Demo.txt”));

  11. String line = null;



  12. //按照行的形式取出数据。取出的每一行数据不包含回车符。

  13. while ((line = bufr.readLine()) != null)

  14. {

  15.        System.out.println (line);

  16. }

  17. bufr.close();



  18. 例:通过缓冲区的形式,对文本文件进行拷贝

  19. import java.io.*;



  20. public class Demo3

  21. {

  22.        public static void main (String[] args) throws IOException

  23.        {

  24.               BufferedReader bufr = new BufferedReader(new FileReader("Demo.txt"));

  25.               BufferedWriter bufw = new BufferedWriter(new FileWriter("mo.txt"));

  26.             

  27.               String line = null;

  28.             

  29.               while ((line = bufr.readLine()) != null)

  30.               {

  31.                      bufw.write(line);

  32.                      bufw.newLine();

  33.                      bufw.flush();

  34.               }

  35.             

  36.               bufw.close();

  37.               bufr.close();

  38.        }

  39. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2