可从IO的类层次,IO框架的设计模式来论述。
总体来说,IO可以分为字节流和字符流,不同在于字符流由字节流包装而来,在IO读入之后经过JVM处理,把字节流转换成字符流。而字符流的字符采用哪种字符编码实现由JVM默认编码决定。
而每个流都分输入和输出,所以,总体来说,IO有四个顶层类:
InputStream
OutputStream
Reader
Writer
而作为机器级别于机器直接交互的则是字节流:
InputStream
OutputStream
以IO的中间类,进行字节流到字符流的转换过渡,通常可作为字符流类的构造参数,可指定编码:
InputStreamReader
OutputStreamWriter
而字节流和字符流的缓冲容器来看有byte和char之分,所以派生出:
ByteArrayInputStream
ByteArrayOutputStream
CharArrayInputStream
CharArrayOutputStream
以上类只是表示流的表示形式,而在传输形式上还表现为是否有缓冲。所以,可以派生出子类为可缓冲类:
BufferInputStream
BufferOutputStream
BufferReader
BufferWriter
每一个顶层类都有对目录文件(File)的支持:
FileInputStream
FileOutputStream
FileReader
FileWriter
在Java中,一个强大的功能就是可以对对象进行序列化,转成二进制文件输出,也就是字节流输出而不是字符流输出,所以有顶层的InputStream和OutputStream派生类:
ObjectInputStream
ObjectOutputStream
流包括了节点流和过滤流,注意的是过滤流,可在读写的同时对数据进行操作,并且实现了同步操作,顶层过滤流类:
FilterInputStream
FilterOutputStream
其子类则在其基础上,对节点流进行封装,常见子类有:
BufferInputStream BufferOutputStream
DataInputStream DataOutputStream
LineNumberInputStream PrintStream
可参考子类的构造方法。
以上IO操作几乎就是把流装载到内存中,对其进行操作的时候是顺序读写,而需要随机读写时:
RandomAccessFile
从整个类框架的结构实现的接口来看,顶层类:
InputStream implements Closable,
OutputStream implements Closable, Flushable
Reader implements Closable, Readable
Writer implements Closable, Flushable, Appendable
各个接口方法:
Closable: close();
Flushable: flush();
Readable: read(CharBuffer cb);
Appendable: append();
从IO类使用时的规则来看,实现这些方法就是很自然的了,也是必须要实现的。如:流使用完必须关闭,流输出前必须刷新。
注意的是,这四个顶层类都没有实现Serializable接口。
java.io.Serializable虽然属于IO框架,但其并不是直接作用于IO框架四个顶层IO类及其子类,而是作用于其它对象,使其可被序列化,再通过IO类对其进行输入输出。如:File、ObjectStreamClass、String。
从IO类的构造器来看,通过几层的包装使得IO类从顶层类的基础功能增强为具有一定能力应用类。如:
BufferReader br = new BufferReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(new BufferWriter(new FileWriter("pw.out")));
ObjectOutputStream out =
new ObjectOutputStream(new FileOutputStream("file.out"));
从设计模式的角度来看,应该就是装饰器模式(但从装饰器定义来看,似乎又不是,请指点)。
分享到:
相关推荐
JAVA_IO流整理思维导图.
#### 五、IO框架结构 ##### 5.1 基于字节的IO操作接口 **输入流**接口`InputStream`和**输出流**接口`OutputStream`构成了Java中基于字节的IO操作基础。这两个接口都有多个子类,用于实现不同类型的数据操作。例如,...
Java核心面试知识整理包括了对JVM内存区域、垃圾回收机制、GC算法、JVM类加载机制、Java集合框架以及Java IO/NIO等多个方面的深入讲解。以下是对这些知识点的详细介绍: JVM内存区域:JVM内存区域包括了程序计数器...
以下是对Java框架整理的一些关键知识点: 1. **静态(static)与实例(his)依赖**: - `static` 关键字用于声明类级别的变量和方法,不依赖于类的实例,可以在没有创建对象的情况下直接调用。 - `his` 是实例...
在"Java常用代码整理"这个主题中,我们可以探讨多个Java编程中的关键知识点,包括基础语法、面向对象特性、异常处理、集合框架、IO流、多线程、网络编程以及实用工具类等。 1. **基础语法**:Java的基础语法包括...
这四者共同构建了Java IO的基础框架。 InputStream和OutputStream是抽象类,它们提供了基本的读写操作,如read()和write()方法。原始处理器(适配器)是用来将不同类型的输入/输出资源转换为InputStream或...
本资料"JAVA高级知识点整理.rar"主要涵盖了多线程、虚拟机、Java IO/NIO以及Java集合框架等核心主题,旨在帮助开发者深入理解Java平台的高级特性和最佳实践。 首先,多线程是Java编程中的重要组成部分,它允许程序...
"Java知识框架思维导图"是整理和理解Java核心技术体系的一种有效工具,它可以帮助学习者系统地掌握Java的核心概念和架构。下面将根据这个主题详细阐述Java知识的主要框架。 一、基础语法 Java的基础语法包括变量、...
Java核心技术是Java编程语言的核心组成部分,它包括了Java的基础语法、面向对象编程概念、类库以及JVM(Java虚拟机)的工作原理等多个方面。这里,我们将深入探讨这些关键知识点。 首先,Java的基础语法是学习Java...
作为Java工程师,需要掌握Java的多方面知识点,包括但不限于JVM(Java虚拟机)原理、Java内存模型、垃圾回收机制、引用类型、集合框架、输入输出流(IO/NIO)以及类加载机制等。 JVM(Java虚拟机) JVM是Java程序...
Java作为一门广泛使用的编程语言,其面试题涵盖了众多的知识领域,包括基础语法、面向对象、集合框架、多线程、网络编程、IO流、异常处理、JVM内存管理、设计模式、Spring框架、数据库操作等。以下是对这些知识点的...
本文档是一份关于Java核心面试知识的整理资料,内容涉及Java虚拟机(JVM)、Java内存模型、垃圾回收机制、Java IO/NIO、Java集合等多个关键知识点。通过对这些知识的梳理,能够帮助Java开发者更好地准备面试,同时也...
接下来是Java的基础知识,涵盖了Java集合框架、IO/NIO模型、类加载机制等。Java集合框架提供了List、Set、Map等接口和实现类,例如ArrayList、Vector、LinkedList、HashSet、TreeSet、LinkedHashSet、HashMap、...
### JAVA核心知识整理 ...以上内容覆盖了JAVA核心知识整理中的关键知识点,包括JVM的基础知识、垃圾回收机制、引用类型、GC垃圾收集器的选择、IO/NIO模型及其实现、类加载机制以及常见的集合类等。
Java IO框架可以分为以字节为单位的输入流和输出流两部分。 以字节为单位的输入流 * InputStream:以字节为单位的输入流的超类 * ByteArrayInputStream:字节数组输入流 * PipedInputStream:管道输入流 * ...
6. **IO流**:Java的IO流处理涵盖了文件操作、网络通信等多种场景,包括字节流、字符流、对象流以及NIO(New IO)框架。 7. **反射机制**:反射是Java的一大特性,允许在运行时检查类、接口、字段和方法的信息,...
这份整理集合涵盖了Java编程语言的基础、进阶、并发、内存管理、框架等多个方面,旨在帮助准备面试的开发者全面了解并掌握Java的核心知识。以下是对这些知识点的详细解析: 1. **Java基础** - **数据类型**:Java...
7. **java.nio.file.***(Java 7及以上):非阻塞I/O框架,包括`Path`、`Files`、`FileSystem`等,提供了更高效的文件操作。 8. **java.io.BufferedReader**和**java.io.BufferedWriter**:用于读写文本文件时的...
网络有协议,java 高并发io框架netty。数据结构包括堆栈,队列,链表,二叉树,红黑树,算法包括各种排序,贪心算法,动态规划。以及进阶的分布式,大数据,机器学习,内容非常全,精心总结的。
这份“java面试(整理).rar”压缩包文件显然包含了针对Java面试精心整理的资料,旨在帮助求职者准备面试,提升成功的机会。让我们深入探讨一下Java面试中可能会遇到的一些关键知识点。 1. **基础语法**:面试通常...