[英]Is it possible to write a java class file and then run it
像这样:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class WriteClassFile
{
public static void main(String args[]) throws IOException
{
File file = new File("ClassFile.class");
file.createNewFile();
FileWriter writer = new FileWriter(file);
writer.write(getFileText());
writer.flush();
writer.close();
ClassFile classFile = new ClassFile();
classFile.print();
}
public static String getFileText()
{
return "Êþº¾ 4
<init> ()V Code LineNumberTable print
SourceFile ClassFile.java Works ClassFile java/lang/Object java/lang/System out Ljava/io/PrintStream; java/io/PrintStream (Ljava/lang/String;)V ! *· ±
% ² ¶ ±
";
}
}
public class ClassFile
{
public void print()
{
System.out.print("Works");
}
}
我已经尝试过runnng,但是却收到非法字符异常。 是否可以编写一个Java类文件然后运行它?
对的,这是可能的。 但不是您这样做的方式。
您不使用Writer编写二进制文件。 如果这样做,由于字符编码步骤会破坏您的(二进制)数据,您可能最终会导致文件损坏。
使用OutputStream。
我不知道这是否是格式正确的字节码“文件”。 我怀疑不是。 看起来它已经被二进制->文本“解码”所破坏。 并可能也进行复制粘贴(请参阅@Antimony的评论)。
假设您可以设法将格式正确的类文件导入文件系统,则可能仍需要实例化一个新的类加载器,然后才能加载它。 如果您先前已加载类,肯定会是这种情况。
更好的主意是创建一个自定义的Classloader
类,并使用投影的defineClass
方法使它直接从内存中的字节数组中Classloader
该类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.