【发布时间】:2013-12-17 00:44:53
【问题描述】:
我不知道在哪里寻求有关 Java API 文档和 Java 代码的澄清和确认,所以我在这里做。
在FileChannel 的 API 文档中,我发现一个错误 w.r.t。在多个地方提交position 和size。
这里只是一个例子。 transferFrom(...) 的 API 文档指出:
“如果给定位置大于文件的当前大小,则不传输任何字节。”
我确认 OpenJDK 代码也包含此代码...
public long transferFrom(ReadableByteChannel src, long position, long count)
throws IOException
{
// ...
if (position > size())
return 0;
// ...
}
...在文件FileChannelImpl.java 中与文档一致。
现在,虽然上面的代码 sn-p 和 API 文档看起来相互一致,但我“感觉”上面应该是 '大于或等于' 而不仅仅是 '大于' 因为position 是文件数据的从0 开始的索引,在position == size() 处读取将没有数据返回给调用者! (在position == size() - 1,至少 1 个字节——文件的最后一个字节——可以返回给调用者。)
以下是同一 API 文档页面中的其他一些类似实例:
position(...):“将位置设置为大于文件当前大小的值是合法的,但不会改变文件的大小。” em>(应该是“大于或等于”。)transferTo(...): “如果给定位置大于文件的当前大小,则不传输任何字节。”(应该是“大于或等于'。)read(...): “如果给定位置大于文件的当前大小,则不会读取任何字节。”(应该是 '大于或等于'。)
最后,read(...) 返回值的文档部分甚至无法与文档的其余部分保持一致。它是这样说的:
返回:
读取的字节数,可能为零,如果给定位置大于或等于文件的当前大小,则为 -1
所以,在这个唯一的例子中,我确实看到他们提到了正确的事情。
总的来说,我不知道该怎么做。如果我今天编写与本文档匹配的代码,那么未来 Java 中的错误修复(代码或文档)将使我的代码出现错误,也需要我的修复。如果我今天自己做正确的事,按照他们今天的样子做,那么我的代码一开始就会出错!
【问题讨论】:
-
我的建议是进行一些实验并提交错误报告:bugreport.sun.com/bugreport
-
我在大约 2 周前在那里提交了另一个错误。从守护程序得到确认和错误 ID,表明我的错误已被接受,但是......即使在今天,我也无法在错误数据库中查找此错误 ID 及其当前状态。所以,不确定这些人对提交的错误做了什么。
-
阅读错误报告给我的印象是它们有点慢(因为它们得到了很多),但如果报告清晰,它们确实会得到它们。如果您提出的问题引起了真正的问题,那么他们似乎会考虑所有修复它所需要的错误是更改一些操作员。
标签: java code-documentation filechannel nio2