【问题标题】:Java NIO: Why the method names "read" "write" sounds the opposite?Java NIO:为什么方法名称“读”“写”听起来相反?
【发布时间】:2018-01-28 05:11:08
【问题描述】:

我是 Java NIO 的新手,而且我的母语不是英语。

当我阅读关于读写缓冲区的方法调用时,我总是感到困惑。这听起来与我相反。

例如,

fileChannel.read(buffer)

根据FileChanneljavadoc,意思是

读取一个字节序列从这个通道进入给定的缓冲区

我想知道为什么它不调用“write”。

在英语中,“write into”和“read from”听起来比“write from”和“read into”更自然。代码阅读中也是如此

fileChannel.write(buffer)

FileChannel 写入字节序列给定的缓冲区

这清楚地说明了演员要做什么。

现在我需要阅读所有相反的东西才能把事情做好……

也许由于历史原因,他们在 IO 包中如何称呼它们?或者,也许我错过了一些明显的东西?希望我能得到你的建议,如何正确解释它们。

谢谢!

【问题讨论】:

  • 当然,我认为read() 说“读取”,是否写入其他对象是一个实现细节。 write() 类似。参数写入了一些东西
  • 我猜它可以被称为readTo 什么的。如果它被称为write,那真是令人困惑。那么ReadableByteChannel 会被称为什么?
  • 它们听起来与我并不相反。真正的问题是为什么它们听起来与对你相反,只有你才能回答这个问题。可能是母语问题?
  • 人们“读一本书”而不是“把一本书写在脑海中”的原因是一样的。
  • “人们阅读一本书”,我将其解释为“人们从一本书中阅读内容”。同理,“FileChannel 读取缓冲区”,我倾向于将其理解为“FileChannel 从缓冲区读取内容”,但这里的意思是“FileChannel 将内容读取到缓冲区”。

标签: java nio naming


【解决方案1】:

当你有object.verb(…)时,动词一般是在对象上执行的,所以如果你想读fileChannel,你应该有fileChannel.read(…)

【讨论】:

    【解决方案2】:

    在任何数据传输中,总会有一个来源从中读取数据,以及一个目的地将数据传送到该目的地写的。可能是因为文件比内存缓冲区的内容更永久,所以通常将涉及文件和内存缓冲区的传输操作命名为文件的角色而不是缓冲区的角色.因此,当文件是源而缓冲区是目标时,它是“读取”,而当文件是目标而缓冲区是源时,它是“写入” .

    【讨论】:

    • 谢谢@Kevin。你的解释很有说服力,尤其是关于谁更重要,更强调数据传输的作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    相关资源
    最近更新 更多