JDK 1.6的JavaCompiler:如何将类字节直接写入byte []数组?
发布时间:2020-05-28 13:46:04 所属栏目:Java 来源:互联网
导读:所以我最近了解到JDK 1.6中提供的新 JavaCompiler API.这使得直接从运行代码将String编译为.class文件变得非常简单: String className = Foo;String sourceCode = ...;JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();ListJava
|
所以我最近了解到JDK 1.6中提供的新 JavaCompiler API.这使得直接从运行代码将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,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 []数组,并避免完全处理文件I / O的混乱? 解决方法也许你可以创建自己的javax.tools.JavaFileManager实现类,在那里你将返回自己的javax.tools.FileObject实现,然后将其写入内存而不是磁盘.因此,对于javax.tools.FileObject的子类,Writer openWriter()抛出IOException方法,您将返回java.io.StringWriter.所有方法都应该转换为它们的String对应物.(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
