주어진 파일이 클래스 파일인지 여부를 결정해야합니다. 확장명을 .exe/.xml 또는 다른 파일로 변경한다고 가정합니다. 클래스 파일이 다르게 파싱되고 다른 파일로 파싱되는 경우 해당 파일이 해당 방식으로 파싱되는지 여부를 결정해야합니다.주어진 파일을 결정하는 방법은 클래스 파일입니까?
클래스 파일 형식은 어떻게 읽을 수 있습니까?
주어진 파일이 클래스 파일인지 여부를 결정해야합니다. 확장명을 .exe/.xml 또는 다른 파일로 변경한다고 가정합니다. 클래스 파일이 다르게 파싱되고 다른 파일로 파싱되는 경우 해당 파일이 해당 방식으로 파싱되는지 여부를 결정해야합니다.주어진 파일을 결정하는 방법은 클래스 파일입니까?
클래스 파일 형식은 어떻게 읽을 수 있습니까?
나는 이것을 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
등으로 대안이 아닙니다.
Java가 아닌 C# .NET에서 확인하려면이 코드가 필요합니다. – Usman
하지만 질문을 "java"로 태그 지정했습니다. 그래서 당신은 자바 코드를 읽는 C# 응용 프로그램을 코딩하거나 C# 코드를 읽는 C# 응용 프로그램을 코딩하고 있습니까? – aberrant80
아마 자바 관련 질문 때문입니다. 그러나 프레임 워크 (현재 내가 작업하고있는)는 .NET env로 작성하여 파일을 처리합니다. 네가 내 요점을 가지고 있다고 생각해. – Usman
class file format은 클래스 파일의 처음 4 바이트가 CA FE BA BE
이 될 것이므로이를 확인할 수 있습니다. 귀하의 요구 사항에 따라, 그것은 충분히 간단한 점검 일 수도 있습니다.
대안 (및 더 나은) 해결책으로, 파일을로드하려고 시도하십시오. 실패하면 클래스 파일이 아닙니다. 성공하면 그때가되었습니다.
다른 방법을주의하십시오. 그것은 솔직한 아이디어입니다. 그러나 클래스에는 의도하지 않은 부작용이있는 정적 초기화 프로그램이있을 수 있습니다. – emory
자바 .class 파일은 HEX로 시작 : 좋은 시작이다 0xCAFE 0xBABE
:
CAFE BABE http://a.imageshack.us/img820/2908/capturadepantalla201007k.png
-1 - 그냥 "자바"로 질문을 태그, 자바 클래스 파일을 읽기에 대한 질문을 위해 ... 모든 사람들이 C#/.NET으로 코딩 된 솔루션을 원한다는 것을 알기를 기대합니다. –
@Stephen C, 나는 (내가 할 수있는 한) 당신의 의견을 슬퍼하고, 무언가에 대해 불평하고, 충분한 능력이있을 때 그것을 고치지 않을 것이다. 나는 투표가 downvoted 기다려야 할 것 같아요;) – OscarRyz