当我浏览Java源代码时,发现了一些不寻常的文件,其中大部分与java.nio
包中的ByteBuffer
有关,该包中源代码非常混乱,并被标记为This file was mechanically generated: Do not edit!
。Java源代码中的机械生成的java源文件
这些文件还包含很大一部分空白行(有些甚至在javadocs(!!?)中),这大概是为了防止行号发生变化。我还看到了一些Java反编译器,例如procyon-decompiler
,它们可以选择保留行号,但我怀疑是这种情况,因为在最终的赞美之前放空行并没有改变。
下面是这些文件中的一些(我在网上找不到任何链接,并没有粘贴它们,因为我不想打破任何版权,但是您可以在src.zip
文件夹中找到它们你的JDK安装文件夹根):
- java.nio.ByteBuffer中
- java.nio.DirectByteBufferR
- java.nio.Bits
- java.nio.BufferOverflowException
我很好奇地想知道:
- 哪些工具生成这些文件?
- 为什么该工具保持行号相同?它是否使调试(堆栈跟踪)更容易?
- 为什么要使用一个工具来生成它们,而所有其他类都是由人类编程的?
- 为什么这个工具会在最后的荣誉之前,甚至在javadocs中,在括号内随机地放置空行?
我怀疑你会得到一个答案,因为该代码看起来已经很长时间了,请查看[2006年的这篇博客文章](http://www.iggdawg.com/blog/2006/09/jaaaavaaaaa /),当时Java仍然归Sun所有。 – APC
看起来这些文件是由模板文件中的某个预处理器生成的:http://hg.openjdk.java.net/jdk9/dev/jdk/file/3b298c230549/src/share/classes/java/nio/ ByteBufferAs-X-Buffer.java.template –
IIRC,由于在#if或#else之后跳过,C预处理器会插入空行。在这里,基本原理很清楚,我认为:如果某个编译器在输出中标记了一个错误,您可以在原始输入中找到它。 – laune