【问题标题】:Ambiguous and confusing naming of FileChannel.read()/write() in Java NIO [closed]Java NIO 中 FileChannel.read()/write() 的模糊和混乱命名 [关闭]
【发布时间】: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


【解决方案1】:

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

任何类的

read 方法都提供对象读取的功能。

根据 Java 文档,InputStream

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

同样,FileChannel

从该通道将字节序列读取到给定缓冲区中。

约定统一,没有歧义。

【讨论】:

  • 谢谢。不详细查看文档是我的错
猜你喜欢
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 2012-04-03
相关资源
最近更新 更多