我不知道在哪里寻求关于 Java API 文档和 Java 代码的澄清和确认,所以我在这里做。
在 API 文档中FileChannel
,我发现要归档position
并归档size
在多个位置的错误。
这里只是一个例子。状态的 API 文档transferFrom(...)
:
“如果给定位置大于文件的当前大小,则不传输任何字节。”
我确认 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(...)
甚至无法与文档的其余部分保持一致。这是它所说的:
回报:
读取的字节数,可能为零,如果给定位置大于或等于文件的当前大小,则为 -1
所以,在这个单独的例子中,我确实看到他们提到了正确的事情。
总的来说,我不知道该怎么做。如果我今天编写与此文档匹配的代码,那么 Java 中的未来错误修复(代码或文档)将使我的代码出现错误,也需要我的修复。如果我今天自己按照今天的情况做正确的事情,那么我的代码一开始就会出错!