JavaCompiler z JDK 1.6: jak pisać bajty klas bezpośrednio do tablicy bajtów []?

Niedawno dowiedziałem się o nowymJavaCompiler API dostępne w JDK 1.6. To sprawia, że ​​kompilacja jest bardzo prostaString do a.class plik bezpośrednio z uruchomionego kodu:

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();

Możesz pobrać źródło doJavaSourceFromString zJavadoc.

To bardzo łatwo się skompilujesourceCode doFoo.class w bieżącym katalogu roboczym.

Moje pytanie brzmi: czy można skompilować prosto dobyte[] tablica i unikaj bałaganuFile I / O w ogóle?

questionAnswers(3)

yourAnswerToTheQuestion