Java NIO中FileChannel.read()/write()的命名不明确且容易混淆
a、 read(b)方法通常意味着a正在从b读取某些东西 我认为这是一个惯例,有这样的例子: InputSream.read()和System.in.read()都是关于从参数中读取内容的 但是,当涉及FileChannel.read()方法时。情况完全不同: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 =
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(字节[])从输入流读入缓冲区。它不从参数读取。谢谢。没有详细查看文档是我的错