java.lang.ClassFormatError:无效的常量池索引63

时间:2013-01-31 16:23:13

标签: java pool

我试图从.jar中提取一个.class文件,但是它有效,但后来我改变了一些东西,现在我收到了这个错误:

java.lang.ClassFormatError: Invalid constant pool index 63

这是我的代码:

String path = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getFile()).getAbsolutePath();
if (path.endsWith("."))
    path = path.substring(0, path.length() - 1);
String decodedPath = URLDecoder.decode(path, "UTF-8");

File file = new File(decodedPath + (decodedPath.endsWith("\\") ? "Classfile.class" : "\\Classfile.class"));

InputStreamReader read = new InputStreamReader(FileSync.class.getResourceAsStream("/Classfile.class"));
FileWriter write = new FileWriter(file);

int c;
while ((i = read.read()) > -1) {
    write.write(i);
}
write.flush();
read.close();
write.close();

ProcessBuilder builder = new ProcessBuilder(System.getProperty("java.home") + "\\bin\\java.exe", "Classfile", decodedPath + (decodedPath.endsWith("\\") ? "Program.jar" : "\\Program.jar"));
builder.directory(file.getParentFile());
Process process = builder.start();

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

InputStreamReaderFileWriter执行隐含字节< - > char转换。由于java类文件是二进制文件,因此请通过FileInputStreamFileOutputStream使用原始字节。

可能您可以使用十六进制编辑器在写入之前和之后打开类文件,以验证新类文件中缺少/添加的内容。