Ich erwäge, Java für ein großes Projekt zu verwenden, aber ich konnte nichts finden, was Strukturen in Java entfernt darstellt. Ich muss in der Lage sein, Netzwerkpakete in Strukturen / Klassen zu konvertieren, die in der Anwendung verwendet werden können.
Ich weiß, dass es möglich ist, RandomAccessFile
zu verwenden, aber dieser Weg ist NICHT akzeptabel. Also bin ich neugierig, ob es möglich ist, eine Menge von Bytes in eine Struktur zu "werfen", wie ich es in C tun könnte. Wenn das nicht möglich ist, kann ich Java nicht verwenden.
Die Frage, die ich stelle, ist also, ob es möglich ist, ausgerichtete Daten ohne zusätzlichen Aufwand in eine Klasse zu übertragen, außer dass die Ausrichtung und die Datentypen spezifiziert sind.
Sie fragen grundsätzlich, ob Sie eine C-spezifische Lösung für ein Problem in einer anderen Sprache verwenden können. Die Antwort ist, vorhersehbar, "Nein".
Es ist jedoch durchaus möglich, eine Klasse zu konstruieren, die in ihrem Konstruktor eine Menge von Bytes akzeptiert und eine entsprechende Instanz erstellt.
%Vor%Sie können sicherstellen, dass Klasseninstanzen eins-zu-eins auf Byte-Arrays abgebildet werden. Fügen Sie eine toBytes () - Methode hinzu, um eine Instanz in Bytes zu serialisieren.
Nein. Sie können ein Array von Bytes nicht an ein Klassenobjekt übergeben.
Davon abgesehen können Sie eine java.nio.Buffer
und extrahieren Sie einfach die Felder, die Sie für ein Objekt benötigen:
Nein, das kannst du nicht tun. Java hat einfach nicht die gleichen Konzepte wie C.
Sie können eine Klasse erstellen, die sich ähnlich wie eine Struktur verhält:
%Vor% und Sie können einen Konstruktor haben, der ein Array oder Bytes oder ein DataInput
benötigt, um die Bytes zu lesen:
Lesen Sie dann Bytes vom Draht und pumpen Sie sie in Structures
:
Es ist nicht so prägnant wie C, aber es ist ziemlich nah. Beachten Sie, dass die DataInput
-Schnittstelle sauberes Entfernen mit Endianness in Ihrem Namen entfernt, was definitiv einen Vorteil gegenüber C darstellt.
Es gibt nichts, was Ihrer Beschreibung entspricht.
Einer Struktur in Java ist eine einfache Klasse am nächsten, die Werte enthält, auf die entweder über ihre Felder oder über set / get-Methoden zugegriffen werden kann.
Das typische Mittel zum Konvertieren zwischen Java-Klasseninstanzen und On-the-Wire-Darstellungen ist die Java-Serialisierung, die je nach Bedarf stark angepasst werden kann. Es ist das, was von Java's Remote Method Invocation API benutzt wird und funktioniert sehr gut.
Wenn Sie mit den Bytecode-Strukturen spielen wollen, sehen Sie sich ASM und CGLIB an; Diese sind sehr häufig in Java-Anwendungen.
Nein, das ist nicht möglich. Sie versuchen, Java wie C zu verwenden, was zu Komplikationen führen kann. Entweder lernen Sie, Dinge auf Java-Art zu tun, oder gehen Sie zurück zu C.
In diesem Fall würde der Java-Weg wahrscheinlich DataInputStream beinhalten und / oder DataOutputStream .
Sie können Array von Bytes nicht in Instanzen der Klasse umwandeln. Aber Sie können viel mehr mit Java tun. Java hat einen internen, sehr starken und sehr flexiblen Mechanismus der Serialisierung. Das ist was du brauchst. Sie können Objekte in / aus dem Stream lesen und schreiben.
Wenn beide Seiten in Java geschrieben sind, gibt es überhaupt kein Problem. Wenn eine der Seiten nicht Java ist, können Sie Ihre Serialisierung anpassen. Beginnen Sie mit dem Lesen von Javadoc von java.util.Serializable.