Java IO流

流的概念

     流(Stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序进程的通信,或读写外围设备、外部文件等。

     一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。

     流的方向是重要的,根据流的方向,流可以分为2类:输入流和输出流。用户可以从输入流中读取信息,但不能写它。相反,对输出流,只能往输入流写,但不能读它。   

     实际上,流的源端和目的端可简单的看成是字节的生产者和消费者,对输入流,可不必关心它的源端是什么,只要简单地从流中读取数据,而对输出流,也可不知道它的目的端,只是简单的往流中写数据。

二 流的三种分类方式    

    1.按流的方向分为:输入流和输出流

    2.按流的数据单位不同分为:字节流和字符流

    3.按流的功能不同分为:节点流和处理流

三 流的层次结构

   

 

 

 

 

 

 

 

 

 

 四 缓冲流 :

         缓冲流要套接在相应的节点流觞,提高了读写的效率。

         此处理流的构造方法都得传相对应的基类类型

         BufferedReader:提供了readLine方法,用于高效读取一行字符串

         BufferedWriter: 提供了newLine用于写入一个行分隔符也就是换行

 

五 转换流:主要作用将字节流转换成字符流。

     InputStreamReader 需要和InputStream套接

     OutputStreamWriter 需要和OutputStream套接

     eg:  InputStremReader input=new InputStreamReader(new FileInputStream(...));

六 流的结构:

     根接口:InputStream/OutputStream

     充当数据源的IO类有FileInputStream/FileOutputStream,ByteArrayInputStream/ByteArrayOutputStream等。

     充当装饰功能的IO类 BufferedInputStream/BufferedOutputStream,DataInputStream/DataOutputStream等。

     它们都是继承装饰接口FilterInputStream/FilterOutputStream.

      使用IO时,首先创建一个数据源IO,然后根据需要的功能创建装饰类IO,其构造函数的参数为以创建的数据源IO

      eg:

      我们以创建一个具有缓冲的文件输入流为例,假定需要从磁盘读取文件“C:\log.txt”:
      // 创建一个FileInputStream:
      FileInputStream fileInput = new FileInputStream(”C:\\log.txt”);
      // 创建一个BufferedInputStream:
      BufferedInputStream bufferedInput = new BufferedInputStream(fileInput);
      // 现在得到的bufferedInput即是具有缓冲的文件输入流
   或者进一步简写如下:
     InputStream input = new BufferedInputStream(new FileInputStream(”C:\\log.txt”));
      // 现在得到的input即是具有缓冲的文件输入流
      java.io.Reader 和 java.io.InputStream 区别
  java.io.Reader 和 java.io.InputStream 组成了 Java 输入类。Reader 用于读入16位字符,也就是 Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。
在 Java 中,有不同类型的 Reader 输入流对应于不同的数据源:
    FileReader 用于从文件输入;
    CharArrayReader 用于从程序中的字符数组输入;
    StringReader 用于从程序中的字符串输入;
    PipedReader 用于读取从另一个线程中的 PipedWriter 写入管道的数据。
相应的也有不同类型的 InputStream 输入流对应于不同的数据源:

    FileInputStream,ByteArrayInputStream,StringBufferInputStream,PipedInputStream。另外,还有两种没有对应 Reader 类型的 InputStream 输入流:


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2010-11-28 15:36  Ma_rk  Views(927)  Comments(0)    收藏  举报