- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
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
,即使它也从底层输入流中读取对象(这次不是基本类型)。这是相关类的分支。
是否有相同的设计推理?
最佳答案
明智的问题。考虑到这一点,我相信 Object*Stream
可以被设计为扩展 Filter*Stream
(同样适用于 Output 或 Input)。为什么没有这样做?可能是因为:
它没有带来任何实际好处。正如 Maciej 所解释的,Filter*Stream
的要点,除了一些不重要的组织类之外,是提供一些常见的默认(而且相当琐碎)实现 那些具有该模式的类(从一些底层流读取/写入,最终转换流),由其他类(来自 Java API 或用户)扩展。但是 Filter*Stream
与 interfaces 无关:你几乎永远不会找到或实现一些需要 Filter*Stream
作为参数的方法,因为例子。因此,让一个类继承 *Stream
或 Filter*Stream
的决定,如果有选择,主要是一个实现决定;类的用户基本不会关心。
ObjectOutputStream
的设计者决定通过提供额外的 empty constructor 来为那些愿意扩展该类的人提供额外的灵 active ,完全重新实现它。 (没有底层 OuputStream
)。此功能(我认为相当罕见)使该类(在概念和实现方面)与 Filter*Stream
类相距甚远。同样,这似乎不是决定性的。
关于java - ObjectInputStream 不应该扩展 FilterInputStream 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2896992/
我有两个扩展 FilterInputStream 类的流。 A 正在从流中读取 double ,B 应获取这些 double 并对它们应用随机噪声。问题是如何正确实现第二个流,以便 B 可以访问 A
我正在尝试使用 FilterInputStream,但无法使其正常工作。如果我对 FilterReader 进行编程,一切顺利: import java.io.*; class Filter exte
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
我从函数获取一个 FilterInputStream 对象作为返回类型。现在我将作为流获取的文件是日志文件。所以我认为它可能是大文件。所以我不想一次读取所有数据。但循环读取数据是一项乏味的工作。 我需
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
我是一个平台的开发人员之一,该平台除其他功能外,还允许用户上传数据文件(来自不同来源)以使用各种脚本进行处理。 Excel for Mac 中以制表符分隔的数据文件不断出现问题。 Excel for
block 引号来自 Java 文档 - A FilterInputStream contains some other input stream, which it uses as its basi
我计划使用 Java 处理 Markdown 文本文件,这些文件在文档开头以 YAML 格式指定附加元信息,如标题、作者、创建日期等。这是一个例子: --- title: An example doc
我试图限制通过下面的类上传到我的应用程序的文件大小。我正在读取输入流,并在文件大小超过限制时抛出异常。 但令人惊讶的是,下面的代码读取的字节数总是比实际文件大小大 12.5%。我已经对多个文件进行了尝
我刚发现FilterInputStream(InputStream)具有与 FilterOutputStream(OutputStream) 的访问修饰符 (protected) 不同的访问修饰符 (
我已经很多年没有写过任何 Java 了,我回过头来用一个简单的“从文件读取”示例来刷新我的内存。这是我的代码.. import java.io.*; public class filereading
我是一名优秀的程序员,十分优秀!