【问题标题】:InputStream and OutputStream abstract methodsInputStream 和 OutputStream 抽象方法
【发布时间】:2013-04-30 04:26:42
【问题描述】:

我最近一直在探索 java.io 包,我一直想知道在哪里可以找到 InputStream 和 OutputStream 中的抽象类所做的确切过程。

我很眼花缭乱,因为至少根据源代码,核心方法都是抽象的(例如InputStream.read()和OutputStream.write(int b))。我特别关注 close 方法,它们的 javadocs 明确表示它们什么都不做:

关闭此输入流并释放与该流关联的所有系统资源。

InputStream 的 close 方法什么都不做。

好吧,输入流显然是写的,而输出流是读的,当然close() 必须进行刷新和资源释放。

谁能给我解释一下?

【问题讨论】:

    标签: java inputstream abstract outputstream


    【解决方案1】:

    这些类是抽象的,因为这样它们可以很容易地扩展,并且实现类可以使用装饰器模式(如 here 所示)。使用装饰器模式,实现者类可以在运行时添加动态功能。例如:有一个InputStream 可以使用FileInputStream 读取文件,可以使用ObjectInputStream 读取序列化对象。如何做到这一点?

    ObjectInputStream ois = new ObjectInputStream(
        new FileInputStream(new File("/path/to/file.dat"));
    

    【讨论】:

    • 确实有很多流继承自这些抽象类。但是,在不使用任何继承类的情况下,inputstream 和 outputstream 都可以工作并做一些事情。他们确实可以发送和接收字节。我问的是流程的核心阶段,没有任何扩展类。 :) 有什么想法吗?
    • @Ruluk 如果你想使用普通的InputStream 和OutputStream,你根本不能,因为它们是abstract 类。您总是需要使用这些类的实现。请注意,实现类包含真正的逻辑/工作。
    • 感谢您的信息!我认为它起到了作用,因为我在一个教程中直接使用了它们,但现在我进一步分析,它们只是引用后代类的基本流。
    • @Ruluk 如果答案解决了您的问题,然后单击箭头下方的复选标记将此帖子标记为答案
    猜你喜欢
    • 1970-01-01
    • 2018-02-25
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 2012-02-12
    • 1970-01-01
    相关资源
    最近更新 更多