gpt4 book ai didi

来自 JDK 1.6 的 JavaCompiler : how to write class bytes directly to byte[] array?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:47:43 24 4
gpt4 key购买 nike

所以我最近了解到新的JavaCompiler API在 JDK 1.6 中可用。这使得直接从运行代码将 String 编译为 .class 文件变得非常简单:

String className = "Foo";
String sourceCode = "...";

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

List<JavaSourceFromString> unitsToCompile = new ArrayList<JavaSourceFromString>()
{{
add(new JavaSourceFromString(className, sourceCode));
}};

StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
compiler.getTask(null, fileManager, null, null, null, unitsToCompile).call();
fileManager.close();

ByteArrayOutputStream bos = new ByteArrayOutputStream();
FileInputStream fis = new FileInputStream(className + ".class");
IOUtils.copyStream(fis, bos);

return bos.toByteArray();

您可以从 Javadoc 中获取 JavaSourceFromString 的源代码.

这将非常方便地将 sourceCode 编译为当前工作目录中的 Foo.class

我的问题是:是否可以直接编译成byte[]数组,避免处理File的困惑 I/O 完全?

最佳答案

也许您可以创建自己的 javax.tools.JavaFileManager 实现类,您可以在其中返回您自己的 javax.tools.FileObject 实现,然后将其写出到内存而不是磁盘。因此,对于 javax.tools.FileObject Writer openWriter() throws IOException 方法的子类,您将返回一个 java.io.StringWriter。所有方法都应转换为其对应的 String

关于来自 JDK 1.6 的 JavaCompiler : how to write class bytes directly to byte[] array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2130039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com