javaIO的类-备忘
Java类库中的I/O类分成输入和输出两部分,通过继承,任何自InputStream或Reader派生而来的类都含有名为read()的基本方法,用于读取单个字节或字节数组;同样,任何自OutputStream或Writer派生的类都含有名为write()的方法,用于写单个字节或字节数组。
我们很少使用单一的类来创建流对象,而是通过叠合多个对象来提供所期望的功能(装饰器模式)。
InputStream的作用是用来表示那些从不同数据源产生输入的类。
类 | 数据源类别 | 功能 | 来源和去除 |
ByteArrayInputStream | 字节数组 | 允许将内存的缓冲区当做InputStream | CharArrayReader |
StringBufferInputStream(已弃用) | String对象 | 将String转换成InputStream | StringReader |
FileInputStream | 文件 | 用于从文件中读取信息 | FileReader |
PipedInputStream | 管道 | 产生用于写入相关PipedOutputStream的数据,实现管道化概念 | PipedReader |
SequenceInputStream | 其他种类流组成的序列,以便合并流 | 将两个或者多个InputStream对象转换成单一InputStream | 无 |
FilterInputStream | 其他数据源,如Internet连接 | 抽象类,作为装饰器的接口 | FilterReader |
类 | 功能 | 来源和去处 | |
DataInputStream | 按照可移植方式从流读取基本数据类型 | 除了readLine(),则仍正常使用DataInputStream | |
BufferedInputStream | 防止每次都得进行实际写操作,代表使用缓冲区 | BufferedReader | |
LineNumberInputStream(已弃用) | 跟踪输入流中的行号,可调用getLineNumber()和setLineNumber() | LineNumberReader | |
PushbackInputStream |
具有“能弹出一个字节的缓冲区”。因此可以将督导的最后一个字符回退 |
PushbackReader |
类 | 功能 | 来源和去处 | |
ByteArrayOutputStream | 在内存中创建缓冲区,所有送往流的数据都要放置在此缓冲区中 | CharArrayWriter | |
FileOutputStream | 用于将信息写至文件 | FileWriter | |
PipedOutputStream | 任何写入其中的信息都会自动作为相关PipedOutputStream的输出,实现管道化概念 | PipedWriter | |
FilterOutputStream | 抽象类,作为装饰器的接口 | FilterWriter | |
(无对应类)StringWriter |
类 | 功能 | 来源和去处 | |
DataOutputStream | 同InputStream | 无 | |
PrintStream | 用于产生格式化输出,其中DataOutputStream处理数据的存储,PrintStream处理显示 | PrintWriter | |
BufferedOutputStream | 避免每次都实际写,可以调用flush清空缓冲区 | BufferedWriter | |
StreamTokenizer(使用Reader的构造器) |
Reader和Writer主要是为了国际化,老的I/O仅支持8位的字节流,不能很好地处理16位的Unicode字符。
InputStream和OutputStream向Reader和Writer的转换用到了"适配器",InputStreamReader,OutputStreamWriter
* 尽量尝试用Reader和Writer,而一旦无法成功编译,则使用面向字节的类库,如java.util.zip是面向字节的
* 无论何时使用readLine(),都不应该使用DataInputStream,而应该使用BufferedReader
RandomAccessFile适用于由大小已知的记录组成的文件。
实现了InputStream和OutputStream接口,但未适用它们的任何功能,它是一个完全独立的类
只有RandomAccessFile支持搜寻方法,并且只适用于文件。