【问题标题】:InputStream and OutputStream - How to differentiate ambiguityInputStream 和 OutputStream - 如何区分歧义
【发布时间】:2018-05-11 08:22:53
【问题描述】:

在我看来,InputStreamOutputStream 是 I/O 的模棱两可的名称。

InputStream 可以认为是“输入到流中”,OutputStream 可以认为是“获取流的输出”。

毕竟,我们从“输入”流中读取,但您不应该从“输出”中读取吗?

选择这两个名称的原因是什么?什么是记住输入/输出流而又不会混淆另一个名称的好方法?

【问题讨论】:

  • 一种简单的方法是记住您从System.in 阅读,然后打印到System.out
  • 没有歧义。它只是从您的角度命名的。它是你的输入,是别人的输出。或者从你那里输出,然后输入给其他人。不幸的是,java.lang.Process 除外。
  • @EJP 模棱两可的是,不清楚“输入”流是否意味着我正在发送我的输入,或者我正在接收别人的输入。没有上下文,这绝对是模棱两可的
  • 所谓的歧义,就是你的输入还是别人的输入,我已经为你解决了。
  • @EJP 即使从我的角度来看,“输入流”也可能意味着我输入的流。

标签: java inputstream outputstream


【解决方案1】:

流的命名不是根据您在代码中如何使用它们,而是根据它们完成的内容。 InputStream 完成从程序外部某处(控制台、文件等)读取 input,而 OutputStream 完成将 output 写入其他地方(再次,控制台,文件等)。在这种情况下,您的 Java 代码只是中介:为了使用输入,您必须从流中读取它,而为了产生输出,您首先必须向流中写入一些内容。

命名的问题在于,流设计上总是有一些输入和输出的东西——你总是可以在任何流上读写。您只需要记住,它们是以它们所做的更重要的任务命名的:与代码之外的东西进行交互。

【讨论】:

  • 这可能是由于历史原因,与 I/O 设备有关,给了我们这些名称,在考虑将数据输入机器并将数据输出到设备的物理设备时更直观.. 现在直觉丢失了imo
  • 如果您将代码视为“机器”,而将其他所有内容视为“设备”,这仍然是正确的。这只是令人困惑,因为您必须在程序中 write outputread input
【解决方案2】:

将您的程序/代码视为演员

  • Actor 想要读入某些内容时,它会寻找句柄 InputStream 导致它的这个流将提供输入。因此,当您从中阅读时。
  • Actor 想要写出一些东西时,它会寻找句柄 到 OutputStream ,然后开始写入将执行的句柄 其余的部分。同样,你写信给它。

我希望这个答案。我只是将我的代码可视化为经典的 Stick Diagram Actor,将 InputStream 和 OutputStream 可视化为您与之交互的实体。

【讨论】:

    猜你喜欢
    • 2012-04-10
    • 2012-02-13
    • 2018-02-25
    • 2012-08-03
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    相关资源
    最近更新 更多