Java 过滤流

标签:
itjava过滤流decorator缓存流数据流打印流 |
分类: Java |
[ 过滤(Filter)流与装饰器 (Decorator) 设计模式 ]
java.io.FilterInputStream
http://s6/middle/66e177ddg85596ac11415&690过滤流" TITLE="Java
抽象的 Decorator 设计模式结构图
其中各元素对照如下:
Component
ConcreteComponent
Decorator
ConcreteDecoratorA
ConcreteDecoratorB
ConcreteDecoratorC
需要注意的是:过滤流(装饰类)并没有改变实际的读写行为,只是扩展了进一步处理数据的功能,它们的构造必须使用一个已经存在的输入流/输出流,并用它进行实际的读写。
java.io.FilterInputStream/FilterOutputStream 重写了所有 InputStream/OutputStream 的方法,但仅仅是调用它所“装饰”的输入流,从本质说没有做额外的任何事。它的作用更多是作为具体过滤流的基类(作用类似于上图的接口 Decrorator),具体的过滤流应该重写其中的方法,提供更具体的实现。如下面的常用的过滤流。
[ java.io 包中的常用过滤流 ]
缓存流 BufferedInputStream/BufferedOutputStream
缓冲流为输入/输出流提供了缓存的功能,它们并没有增加新的方法。由于维护缓存,使得 BufferedInputStream 具有 mark 和 reset 功能; BufferedOutputStream 中的 flush 方法真正起作用 —— 把缓存中的数据真正写出到所修饰的输出流。
数据流 DataInputStream/DataOutputStream
数据流主要提供了功能上的扩展:以Java 基本数据类型(8大类型,但见本站其它文章)和 UTF (稍不同于标准的UTF) 的形式读写数据;以字符数组/字节数组的形式写字符串等。
通常情况下,DataInputStream 和
DataOutputStream
数据流读写对照表:
DataOutputStream | DataInputStream |
---|---|
void writeByte(int v) | byte readByte() 或 int readUnsignedByte() |
void writeShort(int v) | short readShort() 或 int readUnsignedShort() |
void writeInt(int v) | int readInt() |
void writeLong(long v) | long readLong() |
void writeFloat(float v) | float readFloat() |
void writeDouble(double v) | double readDouble() |
void writeBoolean(boolean v) | boolean readBoolean() |
void writeChar(char v) | char readChar() |
void writeBytes(String s) | 无 |
void writeChars(String s) | 无 |
void writeUTF(String s) | String readUTF() |
下面的示例演示缓存流和数据流的使用。
// TestFilter.java
import java.io.*;
public class TestFilter
{
}
注:关于字符编码与解码,请参考本站其它文章。
打印流 PrintStream
打印流是另一种常见的过滤流,提供了打印各种数据类型更为方便的方法。我们常用的 System.out 就是这种类型,它的特点包括:
- 从不抛I/O异常 (但异常情况可以通过 checkError
获取) - 自动调用 flush ,当 println 或 print 打印 '\n' 时
- 支持换行的打印 println 和不换行的打印 print 两套方法
- 提供格式化的打印方法 printf (从 JDK1.5 开始)
[其他过滤流]
为输入/输出流添加额外的功能,满足特定的需要,过滤流的应用非常广泛,除了上面提到的三种常用的过滤流,JDK 1.5 还提供了如下过滤流应用于压缩,解密,安全等不同的领域:
java.util.zip.CheckedInputStream/java.util.zip.CheckedOutputStream
java.util.zip.DeflaterInputStream/java.util.zip.DeflaterOutputStream
javax.crypto.CipherInputStream/javax.crypto.CipherOutputStream
java.security.DigestInputStream/java.security.DigestOutputStream
java.io.PushbackInputStream
javax.swing.ProgressMonitorInputStre
相关示例请参考本站其它文章