I O 流
–线程( Java I** [input]/ O [output]** 系统)(Thread)
对程序语言设计者来说,设计一个令人满意的I/O(输入/输出)系统,是件极艰巨的任务
《Think in Java》
– java.io 包中提供了60多个类(流)。
– 从功能上分为两大类:输入流和输出流。
– 从流结构上可分为字节流(以:字节 为 处理单位 或称 面向字节)和
字符流(以: 字符 为处理单位或称 面向字符)
– 字节流的输入流和输出流基础是 InputStream 和 OutputStream 这两个抽象类,
字节流的输入输出操作由这两个类的子类实现。
字符流是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位