當我瀏覽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