我需要确定给定文件是否是类文件。假设我将扩展名更改为.exe / .xml或其他一些,我需要确定是否给定文件,如果一个类文件将被不同地解析,如果它将是另一个,它将以这种方式解析。 / p>
如何阅读班级档案格式?
答案 0 :(得分:9)
Java .class文件以HEX开头:0xCAFE 0xBABE
这是一个好的开始:
CAFE BABE http://a.imageshack.us/img820/2908/capturadepantalla201007k.png
答案 1 :(得分:4)
我怀疑BCEL允许你这样做。现在检查......
编辑:是的,确实如此。你可以使用ClassParser类;如果文件实际上不是Java类文件,parse
方法将抛出ClassFormatException
。
编辑:好的,所以你需要知道C#。三个选项:
CAFEBABE测试非常简单:
public bool IsProbablyJava(string file)
{
using (Stream stream = File.OpenRead(file))
{
return stream.ReadByte() == 0xca &&
stream.ReadByte() == 0xfe &&
stream.ReadByte() == 0xba &&
stream.ReadByte() == 0xbe;
}
}
它并不完全......还有BinaryReader
等替代品。
答案 2 :(得分:2)
class file format表示类文件的前四个字节为CA FE BA BE
,因此您可以检查它。根据您的要求,这可能是一个足够简单的检查。
作为替代(可能更好)的解决方案,只需尝试加载文件即可。如果失败,则它不是类文件。如果成功,那就是。