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设计师应该这样设计?
答案 0 :(得分:2)
a.read(b)表示从a
读取数据并存储到b
。
read
方法都提供了从>>对象中读取的功能。
根据Java文档,InputStream:
从输入流中读取的下一个数据字节。
同样,FileChannel:
将从字节序列读取到给定缓冲区中。
惯例是统一的,没有歧义。