我最近一直在探索java.io包,我一直想知道在哪里可以找到InputStream和OutputStream中抽象类的确切进程。
我很眼花缭乱,因为至少根据源代码,核心方法都是抽象的(例如InputStream.read()
和OutputStream.write(int b)
)。我特别关注密切方法,其javadoc明确表示他们什么都不做:
关闭此输入流并释放与该流关联的所有系统资源。
close
的{{1}}方法无效。
嗯,在输出流读取时输入流显然是写入的,并且绝对InputStream
必须执行刷新和资源释放。
有人能给我一个解释吗?
答案 0 :(得分:1)
这些类是抽象的,因为它们可以很容易地扩展,实现者类可以使用Decorator模式(如图here所示)。使用装饰器模式,实现者类可以在运行时添加动态功能。例如:拥有InputStream
可以使用FileInputStream
读取文件,该文件可以使用ObjectInputStream
读取序列化对象。如何做到这一点?
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream(new File("/path/to/file.dat"));