javaIO

I O 流

–线程( Java I** [input]/ O [output]** 系统)(Thread)

对程序语言设计者来说,设计一个令人满意的I/O(输入/输出)系统,是件极艰巨的任务

《Think in Java》

– java.io 包中提供了60多个类(流)。
– 从功能上分为两大类:输入流和输出流。
– 从流结构上可分为字节流(以:字节 为 处理单位 或称 面向字节)和
字符流(以: 字符 为处理单位或称 面向字符)
– 字节流的输入流和输出流基础是 InputStreamOutputStream 这两个抽象类,
字节流的输入输出操作由这两个类的子类实现。
字符流是Java1.1版本后新增加的以字符 为单位进行输入输出的处理的流,
字符流输入输出的基础是抽象类 Reader 和 Writer。
java 1 原始版本(Java 1.0) 不包括 字符流 ,因此所有的 输入输出 都是以 字节为单位 的。
java 1.1 中加入了字符流的功能

需要声明:在最底层,所有的输入/输出都是字节形式的。

         基于字符的流只为处理字符提供方便有效的方法。

**java 2** 定义了两种类型的流: 字节流和字符流。

        **字节流** :为处理字节的输入和输出提供了方便的方法。

               例如: 使用字节流读取或写入二进制数据。

        **字符流** : 为字符的输入和输出 处理提供了方便。它们采用了统一的编码标准,

   因而可以国际化。当然在某些场合,字符流比字节流更有效。

– 字节流类( Byte Streams ) :

1). 字节流类用于向字节流读写8位二进制的字节。

    一般的,字节流类主要用于读写诸如   图像或声音等二进制数据

– 字符流类( Character Streams )

1). 字符流类用于向字符流读写16位二进制字符。



                    字节流            字符流

                       Byte Stream         Character Stream

       输入流        | InputStream      |      Reader

    ---------------|-----------------|-------------------

       输出流        | OutputStream     |      Writer

下面我们了解一下 如何让 内容 从外面 读到 程序里面:

它有一种固定的模式 或者是 逻辑:

 **--** 输入流:

       **读数据的逻辑为** :

       **open a Stream**    数据流,也是一种资源。我们在使用这个资源的时候,要先把这个资源打开。

                          例如:   就好比一个水库,不开闸放不了水,打开闸,水就流出来了。

      **while( more information )**

       **{**

            read information

       **}**

     打开一个流之后,流的内容可能有很多,不可能一下子把内容都读完。得慢慢流动,知道流清空为止。

     所以我们需要一个While循环来一直判断这个流 是否还有很多信息,

       --例如:就好比水库里的水,你是不可能一下都把它拿走。

   while( more information ) 就是判断 如果还有更多的信息,我就 一直读取这个流(read information)

   例如: 就好比一瓶可乐2.5L,还有一个小杯子。你不可能一下子倒完,因为装不下;

          所以每次只能倒一杯,等你拿走以后,再看看瓶子里还有没有,如果有接着倒。

   **close the Stream  最后再关闭这个流。**

   **写数据的逻辑为:**

     open a Stream

     while more information

     write information

         --解释:while循环判断当前文件是否还有,更多的信息(more information), 如果有就一直写。

     **close the Stream**  ** **** 最后再关闭这个流 ****。**

流** 的分类**:

 --1). 节点流: 从特定的地方读写的流类,  例如:磁盘或一块内存区域

文件

 txt ----------------------->( 过滤流1 )------------->( 过滤流2 )----------------------> Java

       节点流

 --2). 过滤流:使用节点流作为输入或输出。过滤流是使用一个已存在的输入流或输出流连接创建的。

java.io 包中 InputStream的类层次

过滤流可以包装 节点流:

DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("javaTest\hello.txt")));

装饰模式(**Decorator**)

--  装饰模式 又名 包装(Wrapper)模式

--  装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案.

--  装饰模式以对客户透明的方式 动态的给一个对象附加上更多的责任。换而言之,

   客户端并不会觉得对象在装饰前和装饰后有什么不同。

--  装饰模式可以在不创造更多子类的情况下,将对象的功能加以扩展。

装饰模式的角色:

-- 抽象构件角色(Component):给出一个抽象接口,以规范准备接收附加责任的对象。

-- 具体构件角色(Concrete Component): 定义一个将要接收附加责任的类。

-- 装饰角色(Decorator): 持有一个构件(Component)对象引用,并定义一个与抽象构件接口一致的接口。

-- 具体装饰角色(Concrete Decorator): 负责给构件对象 "贴上" 附加的责任。

装饰模式特点:

-- 装饰对象和真实对象有相同的接口。这样客户端对象就可以,以和真实对象相同的方式和装饰对象交互。

-- 装饰对象包含一个真实对象的引用(reference).

-- 装饰对象接收所有来自客户端的请求。它把这些请求转发给真实对象。

-- 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,

  不用修改给定对象的 结构就可以在外部增加附加的功能。在面向对象的设计中,

  通常是通过继承来实现对给定类的功能扩展。

装饰模式** VS(对比,PK)继承**

装饰模式:

    -- 用来扩展特定对象的功能

    -- 不需要子类

    -- 动态

    -- 运行时分配职责

    -- 防止由于子类导致的复杂和混乱

    -- 更多的灵活性

    -- 对于一个给定的对象,同时可能有不同的装饰对象,客户端可以通过它的需要选择合适的装饰对象发送消息

继承:

   -- 用来扩展 一类对象的功能。

   -- 需要子类

   -- 静态

   -- 编译时分派职责

   -- 导致很多子类产生

   -- 缺乏灵活性

–File (文件类)

–1. 一个File类的对象,表示了磁盘上的 文件或目录

–2. File类提供了与平台无关的方法来对磁盘上的文件或目录 进行操作

–3. File类直接处理文件和文件系统

–4. File类没有指定信息怎样从 文件 读取或 向文件存储

–5. File类描述了文件本身的属性

–6. File对象用来获取或处理与磁盘文件相关的信息,例如:权限,时间,日期和目录路径

–7. File类还可以浏览子目录的层次结构

目录管理:

主要方法:

 -- public boolean mkdir() 根据抽象路径名创建目录(创建目录)

 -- public String[] list() 返回抽象路径名表示路径中的文件名和目录名

isDirectory() : 判断有这个文件表示的目录,是不是一个目录

isFile()  :判断有这个路径表示目标,是不是一个文件

文件管理:

– 在进行文件操作时,常需要知道一个关于文件的信息。

java的File类提供了方法来操作文件和获得一个文件的信息。

另外,File类还可以对目录和文件进行删除、属性修改等管理操作

java.io 包中 Reader的类层次

Java 程序语言使用Unicode来表示字符串和字符,Unicode 使用两个字节来表示一个字符,即一个字符占16位