Java NIO中FileChannel.read()/write()的命名不明确且容易混淆

Java NIO中FileChannel.read()/write()的命名不明确且容易混淆,java,api,naming-conventions,nio,api-design,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 =

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)
读取(复制)意味着将某些内容写入复制缓冲区,而不是从复制缓冲区读取。它是如此令人困惑,以至于我在第一次使用它时没有阅读jdk文档就犯了错误。与fc.write(copy)相同,这意味着从复制缓冲区读取到文件通道

如果fc.read(copy)的命名可以更改为fc.readTo(copy),则Ii将非常有用

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

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

任何类的
read
方法都提供了从对象中读取的功能

根据Java文档:

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

同样地:

从该通道将字节序列读入给定缓冲区


公约是统一的,没有歧义。

不,没有区别。InputStream#read(字节[])从输入流读入缓冲区。它不从参数读取。谢谢。没有详细查看文档是我的错