我在查看Java源代码时发现了一些不寻常的文件,大多与java.nio
包中的ByteBuffer
有关,这些文件的源代码非常混乱,并标有“此文件是机械生成的:请勿编辑!”。
这些文件还包含大量的空白行(甚至在javadoc中间也有!?),可能是为了防止行号发生变化。我也看到过一些Java反编译器,比如procyon-decompiler
,它们有一个选项可以保留行号,但我怀疑这并不是原因,因为在最后一个括号之前添加空白行并没有改变任何内容。
以下是其中几个文件(我找不到它们的在线链接,也没有将它们粘贴到Pastebin上,因为我不想侵犯任何版权,但你可以在JDK安装文件夹的根目录下的src.zip
文件夹中找到它们):
- java.nio.ByteBuffer
- java.nio.DirectByteBufferR
- java.nio.Bits
- java.nio.BufferOverflowException
我很想知道:
- 哪个工具生成了这些文件?
- 为什么这个工具保持行号不变?是为了更容易地进行调试(堆栈跟踪)吗?
- 为什么会使用一个工具来生成它们,而其他所有类都是由人编写的?
- 为什么该工具会在括号内随机放置空白行,在最后一个大括号之前或者甚至在javadoc中间也有?