我不知道在哪里寻求有关Java API文档和Java代码的澄清和确认,所以我在这里做.
在API文档中FileChannel
,我发现在一个以上的地方提交文件position
和文件的一个一个错误size
.
这只是一个例子.transferFrom(...)
州的API文件:
"如果给定位置大于文件的当前大小,则不传输任何字节."
我确认OpenJDK代码也包含此代码...
public long transferFrom(ReadableByteChannel src, long position, long count) throws IOException { // ... if (position > size()) return 0; // ... }
...在FileChannelImpl.java
与文档一致的文件中.
现在,虽然上面的代码片段和API文档看起来相互一致,但我觉得"上面应该'大于或等于'而不仅仅是'大于',因为position
它是一个基于0的文件数据索引,阅读时position == size()
将没有数据返回给来电者!(position == size() - 1
至少1个字节 - 文件的最后一个字节 - 可以返回给调用者.)
以下是同一API文档页面中的其他类似实例:
position(...)
:"将位置设置为大于文件当前大小的值是合法的,但不会更改文件的大小." (应该是'大于或等于'.)
transferTo(...)
:"如果给定位置大于文件的当前大小,则不传输任何字节." (应该是'大于或等于'.)
read(...)
:"如果给定位置大于文件的当前大小,则不读取任何字节." (应该是'大于或等于'.)
最后,返回值的文档部分read(...)
未能与其余文档保持自我一致.以下是它所说的内容:
read(...)
返回:
如果给定位置大于或等于文件的当前大小,则读取的字节数(可能为零)或-1
所以,在这个单一的例子中,我确实看到他们提到正确的事情.
总的来说,我不知道该怎么做.如果我今天编写的代码与本文档相匹配,那么Java中未来的错误修复(代码或文档)将导致我的代码错误,需要我的修复.如果我今天自己做正确的事情,就像他们今天所做的那样,那么我的代码就开始变得错误!