InputStream和OutputStream是以byte字节为单位的,有时我们要以字符(character)为单位,这时就要改用Reader和Write这两个类或其他类来处理字符数据. 所以在java.io包中有两大继承体系,一是以byte处理为主的stream类,它们的命名方式都是以xxxxStream, 另一继承体系是以字符处理为主的Reader/Writer类,它们的命名方式都是以xxxReader或xxxWrite
种类\继承体系 | 字节 | 字符 |
文件(File) | FileInputStream FileOutputStream | FileReader, FileWriter |
内存(数组) | ByteArrayInputStream, ByteArrayOutputStream | CharArrayReader, CharArrayWriter |
内存(字符串) | StringReader, StringWriter | |
管道(Pipe) | PipeInputStream, PipeOutputStream | PipeReader, PipeWriter |
- InputStream 是输入字节数据用的类.
- OutputStream 是输出字节数据用的类
- Reader 是输入字符数据用的类
- Writer是输出字符数据用的类
文件访问
- FileInputStream
- FileOutputStream
- FileReader 处理文本文件的读
- FileWriter 处理文本文件的写
- RandomAccessFile 继承Object类, 可以任意地访问文件中任何位置的数据.
数据流包装类
种类\继承体系 | 字节 | 字符 |
暂存(Buffering) | BufferInputStream, BufferedOutputStream | BufferedReader, BufferedWriter |
字符和字节转换 | InputStreamReader, OutputStreamWriter | |
对象串行化 | ObjectInputStream, OjbectOutputStream | |
特定数据类型访问 | DataInputStream, DataOutputStream | |
计数 | LineNumberInputStream | LineNumberReader |
重复 | PushbackInputStream | PushbackReader |
打印 | PrintStream | PrintWriter |
对象序列化
要序列化的类实现Serializable这个标记接口, 如果类的哪个属性不想序列化, 只要在属性前加上transient修饰符即可