得到一个;不兼容的魔法值';错误Java

得到一个;不兼容的魔法值';错误Java,java,file-io,fileinputstream,classformaterror,Java,File Io,Fileinputstream,Classformaterror,我理解这个错误,因为它很清楚。我需要以某种方式将java的神奇值,0xCAFEBABE(十六进制)写入我首先以编程方式编写的.java文件。我已经阅读了类似问题的所有答案,但它们都指向引入第三方库以编程方式编写java文件 我忍不住认为有一个相对直接的解决方案,而不引入第三方库?如何将十六进制值写入任意文件 现在,我拿着一根绳子。将其转换为字节,然后将这些字节写入FileInputStream,然后转储到扩展名为.java的文件中。下面是我正在使用的代码。我怎样才能不写字节而写十六进制值呢?编码

我理解这个错误,因为它很清楚。我需要以某种方式将java的神奇值,
0xCAFEBABE
(十六进制)写入我首先以编程方式编写的.java文件。我已经阅读了类似问题的所有答案,但它们都指向引入第三方库以编程方式编写java文件

我忍不住认为有一个相对直接的解决方案,而不引入第三方库?如何将十六进制值写入任意文件

现在,我拿着一根绳子。将其转换为字节,然后将这些字节写入
FileInputStream
,然后转储到扩展名为.java的文件中。下面是我正在使用的代码。我怎样才能不写字节而写十六进制值呢?编码不是我的强项,所以这个问题确实给我带来了一些麻烦

我用来编写java文件的代码:

Exception in thread "main" java.lang.ClassFormatError: Incompatible magic 
value 813187905 in class file

更有可能是您下载了一个损坏的.class文件。您可能想知道是否可以在某处找到正确的文件。如果这是不可能的,您可以重新编译源代码,如果您有它


即使您成功地将魔法值正确写入文件,文件本身也可能包含(无法命名)胡言乱语。

我对这个问题的想法完全错误,因此可能发布了一个未对齐的问题。我假设我需要将自己的java文件编译成类文件,而类文件实际上就是编写神奇值的地方

显然,我可以让java的编译器编译我的编程编写的java文件。下面是我用来让它工作的代码:

public void writeJavaFile() throws IOException 
{
    String testString = "class test { public test() {} public void printTest()
    { System.out.println(\"yoooo\");}}";
    String filename = "test.java";
    OutputStream outputStream = new FileOutputStream(filename);
    outputStream.write(testString.getBytes());
    outputStream.flush();
    outputStream.close();
}

我没有下载任何东西。请阅读问题。我正在以编程方式编写java文件。编译类文件时,神奇的值会写入类文件。如果你没有下载任何东西,你的编译器就坏了。好吧,如果我要实现一个自定义类加载器,它接受一个java文件并将其转换为类文件,我将如何将这个神奇的值写入新的类文件?
   `CustomClassLoader classLoader = new CustomClassLoader();
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    int result = compiler.run(null,null,null, "test.java");
    System.out.println("Result: " + result);
    if (result != 0) {
       System.out.println("Error compiling class!!");
       return;
    }
    // Read in newly compiled class file
    Path path = Paths.get("test.class");
    byte[] bytes = Files.readAllBytes(path);
    // Load class into JVM
    Class myClass = classLoader.loadClazz(bytes);`