هل هناك أي أطر جافا للتحليل ملف ثنائي؟
-
22-07-2019 - |
سؤال
ومشكلتي هي أني أريد أن تحليل الملفات الثنائية من أنواع مختلفة مع محلل العام الذي يتم تنفيذه في JAVA. ربما يصف تنسيق الملف مع ملف التكوين الذي قرأه محلل أو إنشاء فئات Java التي تحليل الملفات وفقا لنوع من قواعد التوزيع.
ولقد بحثت قليلا جدا على شبكة الانترنت ولكن وجدت شيئا تقريبا حول هذا الموضوع.
ولقد وجدت ما ليست سوى الأشياء التي تتعامل مع المترجم مولدات (جاي، Cojen، الخ)، ولكن لا أعتقد أنني يمكن استخدامها لتوليد شيء لتحليل الملفات الثنائية. ولكن قد أكون مخطئا في هذا الافتراض.
هل هناك أي الأطر التي تتعامل خصوصا مع إعراب سهل من الملفات الثنائية أو يمكن لأي شخص أن تعطيني تلميحا كيف يمكن استخدام محلل / مترجم مولدات للقيام بذلك؟
على تحديث : في أنا أبحث عن شيء أين يمكنني إرسال ملف التكوين مثل
file:
header: FIXED("MAGIC")
body: content(10)
content:
value1: BYTE
value2: LONG
value3: STRING(10)
ووأنه يولد تلقائيا الأمر الذي يوزع الملفات التي تبدأ ب "MAGIC"، تليها عشرة أضعاف محتوى الحزمة (التي هي نفسها تتكون من بايت، وهو طويل وسلسلة 10 بايت).
على Update2 : في لقد وجدت شيئا مقارنة ما أنا أبحث عن " بانشاء "، ولكن للأسف هذا هو-الإطار بيثون . ربما هذا يساعد شخص ما للحصول على فكرة، ما أبحث عنه.
المحلول
وتعطي في محاولة ل preon
نصائح أخرى
Preon :
public class File {
@BoundString(match="MAGIC")
private String header;
@BoundList(size="10", type=Body.class)
private List<Body> body;
private static class Body {
@Bound
byte value1;
@Bound
long value2;
@BoundString(size="10")
String value3;
}
}
والبيانات فك:
Codec<File> codec = Codecs.create(File.class);
File file = codecs.decode(codec, buffer);
واسمحوا لي أن أعرف إذا كنت تقوم بتشغيل في مشاكل.
ولقد استخدمت DataInputStream لقراءة الملفات الثنائية وأنا أكتب القواعد في جاوة. ؛) الملفات الثنائية يمكن أن يكون مجرد عن أي شكل لذلك ليس هناك قاعدة عامة لكيفية قراءتها
.وأطر لا تجعل دائما أشياء أكثر بساطة. في قضيتك، ملف وصف أطول من رمز لمجرد قراءة البيانات باستخدام DataInputStream.
public static void parse(DataInput in) throws IOException {
// file:
// header: FIXED("MAGIC")
String header = readAsString(in, 5);
assert header.equals("MAGIC");
// body: content(10)
// ?? not sure what this means
// content:
for(int i=0;i<10;i++) {
// value1: BYTE
byte value1 = in.readByte();
// value2: LONG
long value2 = in.readLong();
// value3: STRING(10)
String value3 = readAsString(in, 10);
}
}
public static String readAsString(DataInput in, int len) throws IOException {
byte[] bytes = new byte[len];
in.readFully(bytes);
return new String(bytes);
}
إذا كنت تريد أن يكون ملف التكوين هل يمكن استخدام ملف تكوين جافا. http://www.google.co.uk/search؟q=java + + تكوين ملف
مكتبة محلل combinator هو خيار. JParsec يعمل بشكل جيد، ولكن يمكن أن يكون بطيئا.
ولقد تم وضع إطار للجافا والذي يسمح لتحليل البيانات الثنائية HTTPS: // github.com/raydac/java-binary-block-parser في حالة أن كنت مجرد وصف هيكل ملف ثنائي بك في pseudolanguage
هل تبحث في العالم من موزعي. محلل الجيد هو ياك ، ويمكن أن يكون هناك ميناء منه لجافا.