class Datei einlesen

DrZoidberg

Top Contributor
Ich möchte eine Java class Datei einlesen und frage mich, wie ich das am besten mache.

Ich dachte an sowas:
Java:
class DataIn extends DataInputStream {
    int u1() {
       return readUnsignedByte();
    }
    int u2() {
       return readUnsignedShort();
    }
    int u4() {
       return readInt();
    }
}

class ClassFile {    
    
    ...
    int numMethods;
    Method[] methods;
    ...
    
    ClassFile(DataIn in) {
        ...
        numMethods=in.u2();
        methods=new Methods[numMethods];
        for(int i=0; i<numMethods; i++) methods[i]=new Method(in);
        ...
    }
}

class Method {
    ...
    int numAttributes;
    Attribute[] attributes;
    ...
    
    Method(DataIn in) {
        ...
        numAttributes=in.u2();
        attributes=new Attribute[numAttributes];
        for(int i=0; i<numAttributes; i++) attributes[i]=new Attribute(in);
        ...
    }
}

Ist das eine gute Strategie oder ist es sinnvoller z.B. eine HashMap zu verwenden und dort den Inhalt der class Datei rein zu schreiben.
 

Antoras

Top Contributor
Was meinst du mit du willst eine Class-Datei einlesen? Willst du sie zur Laufzeit laden? Dann google nach Reflection.
 

DrZoidberg

Top Contributor
Nein. Ich will sie analysieren um dann Programme schreiben zu könne wie z.B. javap oder einen Bytecode obfuscator etc.
Reflections ist dazu nicht ausreichend.
 

Antoras

Top Contributor
Dann ist
Code:
Bytecode Library
das Stichwort. Damit solltest du z.B. ASM finden, was dir vieles abnimmt. Selbst eine Lib schreiben würde ich jetzt nicht wenn es nicht gerade dein innerster Wunsch ist zu verstehen wie der JVM Bytecode aufgebeut ist. Wenn du das wissen willst ist wohl
Code:
JVM Spec
das richtige Stichwort.
 
B

...ButAlive

Gast
Den Spass Class-Files einzulesen hab ich mir vor ein paar Jahren in meiner Diplomarbeit auch gemacht. Heute würde ich es nicht mehr machen, gibt genug libs die das können:

1. BCEL scheint tot zu sein.

2. ASM Sehr mächtig und sehr flexibel. Wenn du nur einzelne Class-Files einlesen, analysieren, bearbeiten willst ist diese Bibliothek zu empfehlen. Wenn du mehrere Klassen hast und innerhalb dieser navigieren willst, musst du dir das selbst bauen. Und natürlich muss man das Visitor-Pattern mögen ;)

3. Javassist Eigentlich mehr dazu gedacht Bytecode zu manipulieren, aber man kann damit auch den Bytecode analysieren. Javassist wäre mein persönlicher Favorit, einfache Modelle für die Analyse und man kann innerhalb mehrerer Klassen navigieren.

Wenn du es wirklich selbst machen willst hab ich ein paar kleine Anmerkungen zu deinem Code:

Code:
class DataIn extends DataInputStream

Die Klasse brauchst du ja nur dazu weil überall in der Spezifikation u1, u2 ... steht. Nette Gedankenstütze, brauchts aber nicht wirklich.

Zu deinen anderen Klassen: Trenne die Modelle (ClassFile, Method ...) von ihrer Erzeugung. Damit meine ich schreibe dir eine Factory-Klasse mit den Methoden public ClassFile readClassFile(input) ... und übergebe an deine Modelle nur die ausgelesenen Werte. Das hat mehrere Vorteile:

1. Wenn Oracle irgendwas an dem Format von Classfiles ändert, musst du nicht zig Klassen anpassen, weil du deine "Leselogik" quer verstreut hat.

2. Falls du irgendwann die Klassen nicht mehr selbst auslesen willst, sondern irgendeine von den oben genannten libs verwenden willst, kannst du deine Modelle weiter verwenden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R .class Datei in .jar austauschen Allgemeine Java-Themen 2
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
S Klassen .jar - eine .class datei ändern? Allgemeine Java-Themen 23
G jar Datei findet Main Class nicht... Allgemeine Java-Themen 2
M Klasse aus xyz.class Datei laden / package entfernen? Allgemeine Java-Themen 4
S JavaDoc aus .class Datei extrahieren Allgemeine Java-Themen 5
G Zugriff auf Memberclasses einer geladenen Class-Datei Allgemeine Java-Themen 2
G class-Datei modifizieren Allgemeine Java-Themen 23
J jar-Datei enthält keine Main-Class Allgemeine Java-Themen 22
H aus .class datei eine .java erzeugen Allgemeine Java-Themen 4
N Reflection: An Package einer .class-Datei kommen Allgemeine Java-Themen 2
Natorion Erkennen ob das Programm mittels Jar-Datei oder class . Allgemeine Java-Themen 9
T .class Datei schützen Allgemeine Java-Themen 6
C Problem mit Class.getResource() in einer Jar-Datei Allgemeine Java-Themen 4
D NoClassDefFoundError: Could not initialize class Allgemeine Java-Themen 0
J Class to link Java Allgemeine Java-Themen 4
C Was passt hier nicht bei der Calendar-Class Allgemeine Java-Themen 2
E Class.getResourceAsStream() gibt null zurück Allgemeine Java-Themen 2
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
T Java Robot Class - Bot Allgemeine Java-Themen 3
S Class File Editor -> Source not found Allgemeine Java-Themen 4
G javafx "class path" exception Allgemeine Java-Themen 5
S Java class direved from inner class Allgemeine Java-Themen 6
S Inner Class Allgemeine Java-Themen 11
K Wildcard und class type Allgemeine Java-Themen 9
M Java model class ? Allgemeine Java-Themen 9
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
S class path resource [config.properties}] cannot be opened because it does not exist Allgemeine Java-Themen 4
J Reflection Aufruf: .class durch .dll ersetzen Allgemeine Java-Themen 4
T Compiler-Fehler NoClassDefFoundError beim Laden einer Class Allgemeine Java-Themen 11
J Class Decompile als String (Procyon) Allgemeine Java-Themen 2
H Class 'java.io.BuferedReader' is not present in JRE Emulation Libary | GWT Fehler?! Allgemeine Java-Themen 0
I Datentypen String in class sicher verwahren Allgemeine Java-Themen 17
R Dynimc Class Loading Allgemeine Java-Themen 5
J Inner class + Leer-Konstruktor Allgemeine Java-Themen 1
Neumi5694 Methoden Generic: Rückgabetyp als Class-Parameter übergeben Allgemeine Java-Themen 3
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
V Eclipse .class Dateien Allgemeine Java-Themen 9
KeexZDeveoper Von .class zu .java Allgemeine Java-Themen 7
N Wo ist Object.class ? Allgemeine Java-Themen 0
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
M *.class Files ausführen Allgemeine Java-Themen 2
L Klassen Nested Class In Nested Class Allgemeine Java-Themen 3
perlenfischer1984 Dialect class not found exception Allgemeine Java-Themen 15
Tort-E Manifest Main-Class Allgemeine Java-Themen 8
I JSoup Class auslesen Allgemeine Java-Themen 1
K Generic class und Reflection Allgemeine Java-Themen 2
R Java .class-File-Konstrunkt mit Programm visualisieren Allgemeine Java-Themen 18
A main-class Not found Allgemeine Java-Themen 3
T Java Class Intrumentation mit Annotations in Laufzeit Allgemeine Java-Themen 1
N Per Reflection auf (method) local inner class zugreifen? Allgemeine Java-Themen 3
P JDK installieren Error: Could not find or load main class HelloWorld.java Allgemeine Java-Themen 3
B public class JarFilter extends FileFilter « Falsch? Allgemeine Java-Themen 4
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T Hash von *.class-Datein überprüfen Allgemeine Java-Themen 1
F java.lang.ClassNotFoundException: .class Allgemeine Java-Themen 5
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
Phash Can't find Main Class Allgemeine Java-Themen 4
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
B json zu java class Allgemeine Java-Themen 2
antonbracke Aus Jar eine Class laden und damit arbeiten! Allgemeine Java-Themen 5
D Class<CAP#1> statt Class<...> Allgemeine Java-Themen 5
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
L Class Files , Methode .delete() Allgemeine Java-Themen 13
E NetBeans warning: [options] bootstrap class path not set in conjunction with -source 1.6 Allgemeine Java-Themen 4
X Could not find the main class programm will exit (textdokument) Allgemeine Java-Themen 3
S Could not find the main class Allgemeine Java-Themen 7
B Mal wieder "Could not find the main class" Allgemeine Java-Themen 3
B Variable class in java.lang.Object Allgemeine Java-Themen 11
C Could not find the main class. Allgemeine Java-Themen 15
A Could not find main class: start Allgemeine Java-Themen 5
S main() class finden Allgemeine Java-Themen 7
hdi Could not find main class? Allgemeine Java-Themen 8
R Warum Class.forName(); Allgemeine Java-Themen 7
C class.class angefordert ? Allgemeine Java-Themen 2
S Methoden Class.forName() >> Methoden - Reihenfolge Allgemeine Java-Themen 5
B Test$1.class mit dem javac compiler Allgemeine Java-Themen 7
P Java Editor Could not find the main class GUI. Programm will exit. Allgemeine Java-Themen 3
T Interface > Abstract > Class Allgemeine Java-Themen 11
TheDarkRose Subversion .class Dateien auch commiten? Allgemeine Java-Themen 3
D API - Beispiel + static member in inner (non static) class Allgemeine Java-Themen 2
E String name in class convertieren Allgemeine Java-Themen 4
F Änderung in .jar bzw. .class vornehmen ? Allgemeine Java-Themen 18
H2SO3- bestimmte class immer mit 1.4 compilieren Allgemeine Java-Themen 5
B class dateien "einlesen" und objekte erzeugen Allgemeine Java-Themen 6
G Unterschied MyClass.class vs this Allgemeine Java-Themen 2
S mit Class eine Klasse nur einmal instantiieren Allgemeine Java-Themen 4
Sonecc Zugriff auf Class File einer anderen Jar während der Laufzeit Allgemeine Java-Themen 2
BattleMaster246 Could not find the Main class Allgemeine Java-Themen 30
N class Task extends TimerTask ohne Blockieren Allgemeine Java-Themen 15
H .class in .java umwandeln Allgemeine Java-Themen 3
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
X Cannot refer to a non-final variable settings inside an inner class defined in a different method Allgemeine Java-Themen 4
J Class.forName und CLASSPATH -Problem Allgemeine Java-Themen 5
T Class-files zur Laufzeit zu Reflection-Zwecken laden Allgemeine Java-Themen 18
G Thread in Methode oder in inner class Allgemeine Java-Themen 3
woezelmann referenz der outer class aus static nested class heraus Allgemeine Java-Themen 7
reibi Main-Class in Jarfile Allgemeine Java-Themen 3
E Timer class macht einfach garnichts :/ Allgemeine Java-Themen 6
D Class.forName Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben