Java 字节码不在 .class 文件中

问题描述 投票:0回答:1

我正在开发一个个人项目只是为了好玩,一种新的编程语言(只是因为还不够)。我打算让它在 JVM 上运行,但我需要在编译的文件中存储一些元数据。所以我有两种选择,创建两个单独的文件(一个包含元数据,一个包含字节码),或者将元数据和字节码放在同一个文件中。我想选择第二个,我唯一的问题是如何告诉jvm如何从编译文件中提取字节码?我想创建一个已经存在的 jvm 的特定版本,更改源代码,但也许有一种更简单的方法。

提前谢谢您

java jvm programming-languages bytecode-manipulation jvm-bytecode
1个回答
0
投票

AnyClassYouWant.class.getResourceAsStream("AnyClassYouWant.class")
有效 - 至少对于任何非内部类。对于内部类,你必须请求
"OuterClassName$InnerClass.class"
。这将为您提供原始字节。对于任何东西,以及文件可以位于任何地方的类(在 jar 中、在磁盘上、从网络获取、由某些模块加载系统加载、动态生成,等等)。

类文件格式不是尝试存储随机数据的最佳位置,并且

javac
不能强制这样做,您必须编写一个工具来获取现有的类文件并向其中添加元数据,这很复杂,但是,可能。这不是 java 工具的工作方式:相反,它们将这些东西打包到一个单独的文件中,使用相同的
.getResourceAsStream
机制来加载它,并作为 jar 文件分发。毕竟,如果所有文件最终都作为 jar 中的条目,那么将数据传输到单独的“文件”中并没有真正的缺点。

因此,这个答案解释了如何做到这一点,但附带了以下附加条件:但是,真的,不要。

© www.soinside.com 2019 - 2024. All rights reserved.