gpt4 book ai didi

java - ObjectInputStream 不应该扩展 FilterInputStream 吗?

转载 作者:搜寻专家 更新时间:2023-10-31 19:58:48 25 4
gpt4 key购买 nike

block 引号来自 Java 文档 -

A FilterInputStream contains some other input stream, which it uses as its basic source of data, possibly transforming the data along the way or providing additional functionality.

A DataInputStream lets an application read primitive Java data types from an underlying input stream in a machine-independent way.

DataInputStream 因此扩展了 FilterInputStream

An ObjectInputStream deserializes primitive data and objects previously written using an ObjectOutputStream.

但是,由于某些原因,ObjectInputStream 没有扩展 FilterInputStream,即使它也从底层输入流中读取对象(这次不是基本类型)。这是相关类的分支。

alt text

是否有相同的设计推理?

最佳答案

明智的问题。考虑到这一点,我相信 Object*Stream 可以被设计为扩展 Filter*Stream(同样适用于 Output 或 Input)。为什么没有这样做?可能是因为:

  1. 它没有带来任何实际好处。正如 Maciej 所解释的,Filter*Stream 的要点,除了一些不重要的组织类之外,是提供一些常见的默认(而且相当琐碎)实现 那些具有该模式的类(从一些底层流读取/写入,最终转换流),由其他类(来自 Java API 或用户)扩展。但是 Filter*Streaminterfaces 无关:你几乎永远不会找到或实现一些需要 Filter*Stream 作为参数的方法,因为例子。因此,让一个类继承 *StreamFilter*Stream 的决定,如果有选择,主要是一个实现决定;类的用户基本不会关心。

  2. ObjectOutputStream 的设计者决定通过提供额外的 empty constructor 来为那些愿意扩展该类的人提供额外的灵 active ,完全重新实现它。 (没有底层 OuputStream)。此功能(我认为相当罕见)使该类(在概念和实现方面)与 Filter*Stream 类相距甚远。同样,这似乎不是决定性的。

关于java - ObjectInputStream 不应该扩展 FilterInputStream 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2896992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com