【发布时间】:2013-12-22 00:46:56
【问题描述】:
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) 会很有帮助
这是一个令人困惑的设计吗? 为什么 API 设计者应该这样设计?
【问题讨论】:
-
不,没有什么不同。 InputStream#read(byte[]) 从输入流中读取到缓冲区。它不从参数中读取。
标签: java api naming-conventions nio api-design