java.io

java.io

源码阅读建议

  • 先看每个类的构造函数
  • 再看每个类的 read/write 方法
  • 看后应该发现相同前缀的不同流具有相似的特点

InputStream(返回 byte 的 ASCII 编码)

这里写图片描述
* 子类命名特点:(*)InputStream

ClassComment
StringBuffer已过时,从给定字符串中读取字节
ByteArray从给定的 byte[] 数组中读取字节
File从给定 File 对象中读取字节(借助 native read0() readBytes() 方法)
Filterprotected 构造函数,专门用于包装其它 InputStream,不可被外界实例话,仅供子类实现
LineNumber已过时,继承自 Filter,在读取可以跟踪当前字节所在行号
Pushback继承自 Filter,可以取消读取,当调用 int b=read() 后再调用 unread(b),实现回退(缓存)操作,下次再调用 read() 既可以从上次回退(缓存)中读取 b,提升读性能
Buffered继承自 Filter,在第一次读取时就读取一个固定长度的字节的放到缓存段,以后每次读取时都从这个缓存段里读取,如果要读取的位置不在缓存段里,则重新读取此位置开始的固定长度的字节放到缓存段并返回
Piped管道输入流,与管道输出流合用,用于线程间通信,必须在不同线程;读写核心都在管道输入流,一个线程通过管道输出流写出数据到管道输入流,另一个线程通过管道输入流读取
Sequence包装持有多个 InputStream 实例的逻辑串联,依序读取多个输入流
Data继承自 Filter,提供将读取到字节直接转化为 Java 基本数据类的各种便捷方法
Object包装持有其它 InputStream 实例,对以前使用 ObjectOutputStream 写出的 Java 基本数据和对象进行读入(反序列化)

plantUml

@startuml

interface Closeable
interface DataInput
interface ObjectInput
interface ObjectStreamConstants

DataInput <|-- ObjectInput

abstract class InputStream

Closeable <|.. InputStream

InputStream <|-- ByteArrayInputStream
InputStream <|-- FileInputStream
InputStream <|-- FilterInputStream
InputStream <|-- BufferedInputStream

DataInput <|.. DataInputStream
FilterInputStream <|-- DataInputStream

FilterInputStream <|-- LineNumberInputStream
FilterInputStream <|-- PushbackInputStream

ObjectInput <|.. ObjectInputStream
ObjectStreamConstants <|.. ObjectInputStream
InputStream <|-- ObjectInputStream

InputStream <|-- PipedInputStream
InputStream <|-- SequenceInputStream
InputStream <|-- StringBufferInputStream

@enduml

OutputStream

这里写图片描述
* 子类命名特点:(*)OutputStream + PrintStream

ClassComment
Filter专门用于包装其它 OutputStream,与 FilterInputStream 不同,可被外部实例化
Buffered继承自 Filter,内置 buffer[] 数组,当每次 write 时,只是简单的设置到 buffer,当 write 之前如果 buffer 满了才一次性调用持有的 OutputStream 实例 flushBuffer(数组)
Data继承自 Filter,提供将写出 Java 基本数据类型和图形的各种便捷方法
PrintStream继承自 Filter,提供了写出 Java 基本数据类型、字符串、char[] 等各种方便方法,默认每次写出一个字节不会立即 flush()
Piped管道输出流,与管道输入流合用,用于线程间通信,必须在不同线程;读写核心都在管道输入流,一个线程通过管道输出流写出数据到管道输入流,另一个线程通过管道输入流读取
ByteArray将字节写出到一个 byte[],此 byte[] 会在写出时根据需要自动增长,目的就是通过 toByteArray() 和 toString() 获取最终写出数据
File将字节写出到一个文件(借助 native write() writeBytes() 方法)
Object包装持有其它 OutputStream 实例,提供将 Java 基本数据和图形进行写出(序列化)

plantUml

@startuml

interface Closeable
interface Flushable
interface DataOutput
interface Appendable
interface ObjectOutput
interface ObjectStreamConstants

DataOutput <|-- ObjectOutput

abstract class OutputStream

Closeable <|.. OutputStream
Flushable <|.. OutputStream

OutputStream <|-- ByteArrayOutputStream
OutputStream <|-- FileOutputStream
OutputStream <|-- FilterOutputStream

FilterOutputStream <|-- BufferedOutputStream
DataOutput <|.. DataOutputStream
FilterOutputStream <|-- DataOutputStream
Appendable <|.. PrintStream
FilterOutputStream <|-- PrintStream

ObjectOutput <|.. ObjectOutputStream
ObjectStreamConstants <|.. ObjectOutputStream
OutputStream <|-- ObjectOutputStream
OutputStream <|-- PipedOutputStream

@enduml

Reader(返回 char 的字符编码)

这里写图片描述
* 子类命名特点:(*)Reader

ClassComment
Filterprotected 构造函数,专门用于包装其它 Reader,不可被外界实例化,仅供子类实现
Pushback继承自 Filter,可以取消读取,当调用 int c=read() 后再调用 unread(c),实现回退(缓存)操作,下次再调用 read() 既可以从上次回退(缓存)中读取 c,提升读性能
Buffered专门包装其它 Reader,与 Filter 不同可以被外界实例化;在第一次读取时就读取一个固定长度的字符的放到缓存段(char []),以后每次读取时都从这个缓存段里读取,如果要读取的位置不在缓存段里,则重新读取此位置开始的固定长度的字节放到缓存段并返回;同时提供一个方便读取一整行数据的方法
LineNumber继承自 Buffered,在读取时可以跟踪当前字符所在行号,注意提供的设置行号的方法并不一定是下次读取的字符所在的行号
CharArray从给定的 char[] 数组中读取字符
InputStream从给定的 InputStream(字节流)中读取字符
File继承自 InputStream,仅定义了 3 个构造方法,借助父类构造方法方便从给定的 String、File、FileDescriptor 中读取字符
Piped管道输入字符流,与管道输出字符流合用,用于线程间通信,必须在不同线程;读写核心都在管道输入字符流,一个线程通过管道输出字符流写出数据到管道输入字符流,另一个线程通过管道输入字符流读取
String从给定的 String 中读取字符

plantUml

@startuml

interface Closeable
interface Readable

abstract class Reader
Closeable <|.. Reader
Readable <|.. Reader

abstract class FilterReader

Reader <|-- BufferedReader
BufferedReader <|-- LineNumberReader
Reader <|-- CharArrayReader
Reader <|-- FilterReader
FilterReader <|-- PushbackReader
Reader <|-- InputStreamReader
InputStreamReader <|-- FileReader
Reader <|-- PipedReader
Reader <|-- StringReader

@enduml

Writer

这里写图片描述
* 子类命名特点:(*)Writer

ClassComment
Filterprotected 构造函数,专门用于包装其它 Reader,不可被外界实例化,仅供子类实现
Buffered专门包装其它 Writer,与 Filter 不同可以被外界实例化;内置 (char)cb[] 数组,当每次 write 时,只是简单的设置到 cb,当 write 之前如果 cb 满了才一次性调用持有的 Writer 实例 flushBuffer(数组);提供 newLine() 方法实现了平台相关的换行符插入
CharArray将字符写出到一个 char[],此 char[] 会在写出时根据需要自动增长,目的就是通过 toCharArray() 和 toString() 获取最终写出数据
OutputStream用给定的 OutputStream(字节流)中写出字符
File继承自 OutputStream,仅定义了 5 个构造方法,借助父类构造方法方便从给定的 String、File、FileDescriptor 中写出字符
Piped管道输出字符流,与管道输入字符流合用,用于线程间通信,必须在不同线程;读写核心都在管道输入字符流,一个线程通过管道输出字符流写出数据到管道输入字符流,另一个线程通过管道输入字符流读取
Print提供了写出 Java 基本数据类型、字符串、char[] 等各种方便方法,默认每次写出一个字节不会立即 flush()
String内部持有 StringBuffer 实例,用于构造字符串:toString()

plantUml

@startuml

interface Closeable
interface Flushable
interface Appendable

abstract class Writer
Closeable <|.. Writer
Flushable <|.. Writer
Appendable <|.. Writer

abstract class FilterWriter

Writer <|-- BufferedWriter
Writer <|-- CharArrayWriter
Writer <|-- FilterWriter
Writer <|-- OutputStreamWriter
OutputStreamWriter <|-- FileWriter
Writer <|-- PipedWriter
Writer <|-- PrintWriter
Writer <|-- StringWriter

@enduml

Other

这里写图片描述

plantUml

@startuml

interface Closeable
interface Flushable
interface Serializable
interface Externalizable
interface FileFilter
interface FilenameFilter
interface ObjectInputValidation
interface ObjectStreamConstants
interface DataOutput
interface DataInput


Serializable <|-- Externalizable
Serializable <|.. File
Serializable <|.. FilePermission
Serializable <|.. ObjectStreamClass
Serializable <|.. SerializablePermission

Flushable <|.. Console
Closeable <|.. RandomAccessFile
DataOutput <|.. RandomAccessFile
DataInput <|.. RandomAccessFile

class Bits
class FileDescriptor
class ObjectStreamField
class StreamTokenizer

class DefaultFileSystem #PaleGreen
class DeleteOnExitHook #PaleGreen
class ExpiringCache #PaleGreen
abstract class FileSystem #PaleGreen
class UnixFileSystem #PaleGreen
FileSystem <|-- UnixFileSystem
class SerialCallbackContext #PaleGreen

@enduml

Exception

这里写图片描述

plantUml

@startuml

Error <|-- IOError
class UncheckedIOException

IOException <|-- CharConversionException
IOException <|-- EOFException
IOException <|-- FileNotFoundException
IOException <|-- InterruptedIOException
IOException <|-- ObjectStreamException
IOException <|-- SyncFailedException
IOException <|-- UnsupportedEncodingException
IOException <|-- UTFDataFormatException

abstract class ObjectStreamException
ObjectStreamException <|-- InvalidClassException
ObjectStreamException <|-- InvalidObjectException
ObjectStreamException <|-- NotActiveException
ObjectStreamException <|-- NotSerializableException
ObjectStreamException <|-- OptionalDataException
ObjectStreamException <|-- StreamCorruptedException
ObjectStreamException <|-- WriteAbortedException

@enduml
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值