Java NIO中FileChannel.read()/ write()的模糊和混淆命名

时间:2013-12-05 07:24:19

标签: java api naming-conventions nio api-design

a.read(b)方法通常意味着a正在读取b中的某些内容。

我认为这是一个惯例,有类似的例子:

InputSream.read()和System.in.read()都是关于从参数中读取内容的。

然而,当谈到FileChannel.read()方法时。这是一个完全不同的情况:

FileChannel fc = FileChannel.open(Paths.get("test"),StandardOpenOption.READ,StandardOpenOption.WRITE)
ByteBuffer copy = ByteBuffer.allocate(10)
nread = fc.read(copy)

fc.read(copy)表示向复制缓冲区写入内容而不是从复制缓冲区中读取。令人困惑的是,我第一次使用它时没有读取jdk文件就犯了错误。与fc.write(copy)相同,表示从复制缓冲区读取到文件通道。

如果fc.read(copy)的命名可以更改为fc.readTo(copy)

,则Ii很有帮助

这是一个令人困惑的设计吗? 为什么API设计师应该这样设计?

1 个答案:

答案 0 :(得分:2)

a.read(b)表示从a读取数据并存储到b

任何类的

read方法都提供了从>对象中读取的功能。

根据Java文档,InputStream

  

从输入流中读取的下一个数据字节

同样,FileChannel

  

字节序列读取到给定缓冲区中。

惯例是统一的,没有歧义。