Auf eine Klasse byteweise zugreifen

Status
Nicht offen für weitere Antworten.

chetigol

Mitglied
Hi

Ich möchte den Inhalt einer beliebigen Klasse/Struktur, welche ausschließlich einfache Datentypen enthält, in ein File oder über ein Socket ausgeben, wie mache ich dies am geschicktesten unter Java?
Unter C/C++ würde ich einfach folgendes machen:

Type Struct
{
Word Var1;
Byte Var2;
Short Var3;
} MyStruct;

MyStruct sVar;

Byte* pV = (byte*)&sVar;

Und hier kann ich den pointer nach belieben incrementieren.

File->write( pV, sizeof(MyStruct) );
Sock->write( pV, siveof(MyStruct) );

Oder gleich:

File->write( (byte*)&sVar, sizeof(MyStruct) );
Sock->write( (byte*)&sVar, siveof(MyStruct) );

Wie würde man soetwas unter Java lösen?
Muss ich für jede Klasse, welche die Daten byteweise zur verfügung stellen muss eine funktion implementieren, welche die Daten in einen ByteStream umwandelt?

Danke!
 

chetigol

Mitglied
Danke, schau ich mir gleich genauer an!

Werden bei der Serialisierung nicht informationen wie Variablentyp, usw. mitgespiechert?
Das will ich aber nicht! möchte nur den Inhalt byteweise abspeichern bzw verschicken. oder lieg ich da falsch?
 

tfa

Top Contributor
Richtig, da werden auch Typinformationen berücksichtigt. Warum ist das ein Problem für dich?
 

chetigol

Mitglied
weil es sich dabei um vordefinierte binäre datenstructuren für ein Embeded-System handelt.

Ein vereinfachtes File schaut zB so aus:

Byte Parameter1;
Word Parameter2;
Byte[3] Parameter3;

ohne irgendwelcher Meta-Information. Das System weiß schon, wie es auf die binärdaten zugreifen soll.
 

Ebenius

Top Contributor
Man kann in Java™ gücklicher Weise nicht irgendwie Äpfel auf Einkaufswagen casten. :)

Vielleicht solltest Du Deine Datenobjekte im Java kennen, zum Beispiel, indem sie alle das selbe Interface implementieren:
Code:
public interface SimpleExternalizableDataObject {
  void writeToStream(DataOutputStream os) throws IOException;
  void readFromStream(DataInputStream is) throws IOException;
}

Oder vielleicht auch so:
Code:
public interface SimpleExternalizableDataObject {
  byte[] toExternalForm();
  void fromExternForm(byte[] data);
}

Ebenius
 

chetigol

Mitglied
würde mal sagen, jede Sprache hat seine vor und nachteile! Diese Problemstellung wäre in C++ in einer Zeile gelöst...hehe! Natürlich mit Gefahren verbunden!

ja, an soetwas hab ich auch schon gedacht! Das würde aber bedeuten, dass ich für jede Klasse die entsprechenden Funktionen Implementieren müsste, was nicht wenig aufwand wäre.

Habe mir schon überlegt eine eigene Serialisierung zu schreiben und mittels Reflections diese generisch für alle Klassen zu implementieren.
 

Ebenius

Top Contributor
chetigol hat gesagt.:
Habe mir schon überlegt eine eigene Serialisierung zu schreiben und mittels Reflections diese generisch für alle Klassen zu implementieren.

Auch die Möglichkeit hast Du natürlich. Hab vorhin auch darüber nachgedacht. Aber diese Sorte Vorschläge veröffentliche ich lieber nur als Gast. :lol:

Ebenius
 

chetigol

Mitglied
Ebenius hat gesagt.:
chetigol hat gesagt.:
Habe mir schon überlegt eine eigene Serialisierung zu schreiben und mittels Reflections diese generisch für alle Klassen zu implementieren.

Auch die Möglichkeit hast Du natürlich. Hab vorhin auch darüber nachgedacht. Aber diese Sorte Vorschläge veröffentliche ich lieber nur als Gast. :lol:

Ebenius

wieso das? was ist daran nicht ok? bin eher ein java-anfänger also bitte um aufklärung :)
 
S

SlaterB

Gast
ist sozusagen der C/C++ in Java ;)

nein, ist aber einfach nicht normal sauber objektorientiert sondern das Schema
'jetzt werfen wir mal 90% von Java weg und arbeiten auf tiefster Ebene über alle Grenzen hinweg'

da Serialisierung auch nicht viel mehr macht bis auf anderes Daten-Format, ist da hier aber schon akzeptabel, finde ich
 

chetigol

Mitglied
SlaterB hat gesagt.:
ist sozusagen der C/C++ in Java ;)

nein, ist aber einfach nicht normal sauber objektorientiert sondern das Schema
'jetzt werfen wir mal 90% von Java weg und arbeiten auf tiefster Ebene über alle Grenzen hinweg'

da Serialisierung auch nicht viel mehr macht bis auf anderes Daten-Format, ist da hier aber schon akzeptabel, finde ich

Was meinst damit, ist C/C++ in Java? Ich sehe da nicht annährend etwas, dass sich an C++ anlehnt. Es geht garnicht!

Wie die Daten abgespeichert werden sollen hat doch nix mit der Objektorientierung zutun und ich finde, dass keine der hier gebrachten Vorschläge gengen irgendwelche Java-Regeln verstoßen. Falls ich falsch liegen sollte, dann bitte um korrektur!

Sowohl die Serialisierung+Reflections Methode alsauch die von Ebenius vorgeschlagenen Interfaces sind doch vollkommen ok!

Wieso findest du es "NUR" akzeptabel? Gibt es doch eine bessere möglichkeit dies zu machen?

Es ist nun mal die Vorgabe des Kunden dessen System tausende Binärdaten erwartet, welche mehr oder weniger unterschiedliche Strukturen aufweisen.
 

Ebenius

Top Contributor
Es geht darum, welches Wissen wo liegt. In C werden Pointer immer interpretiert wie der Nutzer gerade lustig ist und in der Realität gibt's auch in C++ oft Casts die eigentlich verboten gehören. :)

Reflection ist ein Werkzeug, welches die durch die Sprache vorgegebenen Strukturen unterwandern kann. Zum Beispiel kann ich Felder abgreifen die ich gar nicht kennen darf, weil mir der Typ des Objektes unbekannt ist. Das steht natürlich oft im Widerspruch zu gutem Design.

In Deinem Fall würde ich mich trotzdem eventuell auf Reflection einlassen.

Grüße, Ebenius
 
S

SlaterB

Gast
> Was meinst damit, ist C/C++ in Java?
SlaterB hat gesagt.:
ist sozusagen der C/C++ in Java ;)

---->nein<----

Scherz



> Wieso findest du es "NUR" akzeptabel? Gibt es doch eine bessere möglichkeit dies zu machen?

'nur' habe ich nicht benutzt, aber wenns besser klingt: ja, falls du beliebige Daten so darstellen willst, wäre alles andere gar nicht machbar

falls du andererseits nur wenige derartiger Datenformate hast, dann wäre ein explizit zusammengesetztes byte[] schöner,
zumal evtl. die Reihenfolge wichtig ist?
 

chetigol

Mitglied
Ebenius hat gesagt.:
Reflection ist ein Werkzeug, welches die durch die Sprache vorgegebenen Strukturen unterwandern kann. Zum Beispiel kann ich Felder abgreifen die ich gar nicht kennen darf, weil mir der Typ des Objektes unbekannt ist. Das steht natürlich oft im Widerspruch zu gutem Design.

In Deinem Fall würde ich mich trotzdem eventuell auf Reflection einlassen.

Grüße, Ebenius

ahso, verstanden! bin halt c++ verseucht, deshalb gehört soetwas für mich zum alltag...hehe!
Mach mir halt etwas sorgen um die Laufzeit, wenn ich es mittels Reflections mache, da ich zuerst die klassen analysieren muss bevor ich die daten schreibe, was sich bei bis zu 4000 Files ordentlich aufsummieren kann!

danke für die antworten! falls jemandem noch etwas einfallen sollte, dann nur her damit!
 

chetigol

Mitglied
SlaterB hat gesagt.:
> Was meinst damit, ist C/C++ in Java?
SlaterB hat gesagt.:
ist sozusagen der C/C++ in Java ;)

---->nein<----

Scherz



> Wieso findest du es "NUR" akzeptabel? Gibt es doch eine bessere möglichkeit dies zu machen?

'nur' habe ich nicht benutzt, aber wenns besser klingt: ja, falls du beliebige Daten so darstellen willst, wäre alles andere gar nicht machbar

falls du andererseits nur wenige derartiger Datenformate hast, dann wäre ein explizit zusammengesetztes byte[] schöner,
zumal evtl. die Reihenfolge wichtig ist?

na passt, dann mach ich mich mal an die arbeit!

THX
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
G Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
Vivien Auf eine Variable von einer anderen Klasse aus zugreifen Java Basics - Anfänger-Themen 3
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
jonny_2k12 Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben? Java Basics - Anfänger-Themen 21
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
bensdt Klasse erweitern um eine Methode "void decrement()" Java Basics - Anfänger-Themen 5
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
W Zwei Programme sollen auf eine Klasse zugreifen Java Basics - Anfänger-Themen 18
L Klassen Wie “installiert” man eine Klasse? Java Basics - Anfänger-Themen 2
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
H Eine befühlte Klasse weiter geben an Controller Java Basics - Anfänger-Themen 12
I Wie benutzt man eine Klasse? Java Basics - Anfänger-Themen 13
A Variablen Main Klasse soll auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 3
F OOP Instanz einer Klasse an eine andere weitergeben Java Basics - Anfänger-Themen 16
M Aufgabe: Eine Klasse und viele Untermethoden Java Basics - Anfänger-Themen 30
DaCrazyJavaExpert Klassen Von einer Klasse auf eine erbende Klasse zugreifen Java Basics - Anfänger-Themen 13
L Eine Klasse aus dem gleichen Package starten Java Basics - Anfänger-Themen 3
B Wie kann ich eine Methode einer selbst erstellten Klasse statisch importieren? Java Basics - Anfänger-Themen 5
D Klasse durch eine Schleife wiederholen Java Basics - Anfänger-Themen 1
J Werte an eine andere Klasse übergeben Java Basics - Anfänger-Themen 4
T Erste Schritte Schreiben Sie eine Klasse Zeit, die eine Zeitdauer in Minuten beschreibt. Die Anzahl Minuten verwalt Java Basics - Anfänger-Themen 3
U Klassen IntelliJ14.1.1 Ultimate startet eine Main-Klasse NICHT MEHR Java Basics - Anfänger-Themen 0
P auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 12
OlafHD Einen String an eine Klasse übergeben Java Basics - Anfänger-Themen 2
O Übergabe in eine andere Klasse Java Basics - Anfänger-Themen 3
I Java Eingabe aus einer anderen Klasse in eine andere an Konstruktor übergeben Java Basics - Anfänger-Themen 4
E Suche Klasse die eine Bedinung prüft und einen von zwei Auswahlwerten zurückgibt... Java Basics - Anfänger-Themen 6
V wie kann ich eine laufende Klasse zum "stopen" bringen und zur main zurückkehren? Java Basics - Anfänger-Themen 11
W (XML/XSL) Daten aus Eclipse in eine Klasse Laden. Java Basics - Anfänger-Themen 1
S Methoden eine Instanz einer eigenen Klasse als parameter übergeben Java Basics - Anfänger-Themen 9
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
M Wann eine Wrapper Klasse verwenden und wann einen primitiven Datentypen? Java Basics - Anfänger-Themen 8
S Aus einer Klasse eine andere laden Java Basics - Anfänger-Themen 6
D Wie baue ich sinnvoll eine Klasse, genauer die Methodenaufrufe auf? Java Basics - Anfänger-Themen 4
S Interface Implementieren von Methoden aus einer Klasse in eine GUI Java Basics - Anfänger-Themen 6
M Klasse fuer eine 5er Liste? Java Basics - Anfänger-Themen 5
R Interface Datentyp bei Erzeugung eines Objekts, dessen Klasse eine Schnittstelle implementiert Java Basics - Anfänger-Themen 18
G Klassen Array durch eine Klasse aufrufen Java Basics - Anfänger-Themen 4
J Mehrere Klassen in eine Klasse schreiben? Java Basics - Anfänger-Themen 7
N Kann man in einem Projekt nur eine Klasse ausführen? Java Basics - Anfänger-Themen 6
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5
W Klassen Kann eine Variable nicht aus einer Klasse bekommen Java Basics - Anfänger-Themen 9
J Variablen Array aus anderer Klasse auslesen-Wie verhindert man eine NullPointerException? Java Basics - Anfänger-Themen 4
M Klassen Eine Klasse abrufen ohne eine neue Instanze auf zu rufen? Java Basics - Anfänger-Themen 8
M Eine Klasse als .dmg (MAc) abspeichern Java Basics - Anfänger-Themen 5
P Eingabe aus JTextField/Area an eine andere Klasse übergeben. Java Basics - Anfänger-Themen 2
A Threads Eine Klasse muss auf Variable der Anderen warten. Java Basics - Anfänger-Themen 6
L Methoden Eine Methode aus einer anderen Klasse aufrufen Java Basics - Anfänger-Themen 4
D OOP Zugriff auf eine Klasse aus einem Interface-Objekt Java Basics - Anfänger-Themen 7
E Wert in eine andere Klasse übergeben Java Basics - Anfänger-Themen 3
L Klassen Kann eine Klasse sich selbst returnen? Java Basics - Anfänger-Themen 26
L Über abstrakte Klasse auf eine Klasse zugreifen? Java Basics - Anfänger-Themen 6
N OOP Zugriff auf eine Objekt innerhalb einer Klasse aus statischen Methoden Java Basics - Anfänger-Themen 9
M 2Methoden eine Klasse 1 Thread Java Basics - Anfänger-Themen 3
S Von einer Klasse auf eine Liste einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 8
J eine Klasse mit speziellem Parameter aufrufen und verwenden Java Basics - Anfänger-Themen 9
M Suche eine Klasse, mit der ich Mausklicks ausführen kann. Java Basics - Anfänger-Themen 3
E Variable aus einer Methode heraus in eine andere Klasse übergeben Java Basics - Anfänger-Themen 13
B Was passiert, wenn eine konkrete Klasse von generische Klasse erbt? Java Basics - Anfänger-Themen 14
Q 2 Objekte in eine Klasse übergeben Java Basics - Anfänger-Themen 10
J OOP Zugriff einer Klasse auf eine Andere Java Basics - Anfänger-Themen 8
B Eine neue Klasse in anderen Projekten nutzen Java Basics - Anfänger-Themen 5
S Zwei Programme verwenden eine selbe Klasse Java Basics - Anfänger-Themen 4
M Zwei Threads greifen auf eine Methode einer Klasse zu. Komplikationen? Java Basics - Anfänger-Themen 18
S Wann wird eine Klasse geladen? Java Basics - Anfänger-Themen 17
F wie auf eine andere Klasse zugreifen? Java Basics - Anfänger-Themen 2
D Wie neue Instanz einer Klasse erstellen, von der ich nur eine andere Instanz kenne? Java Basics - Anfänger-Themen 13
-horn- EINE setter/getter klasse aus mehreren klassen befüllen Java Basics - Anfänger-Themen 13
M Wie setzt sich eine Klasse zusammen? Java Basics - Anfänger-Themen 16
L Aus einer Methode eine eigene Klasse machen - modular coden Java Basics - Anfänger-Themen 14
H Eine Abstrakte Klasse muss. Java Basics - Anfänger-Themen 7
J Zugriff auf ein Array über eine andere Klasse Java Basics - Anfänger-Themen 7
G kein Zugriff auf eine Klasse in einem Unterordner Java Basics - Anfänger-Themen 11
E Eine Klasse hat eine Instanz von sich selbst. Java Basics - Anfänger-Themen 6
M Übergabe von Variablen in eine Klasse Java Basics - Anfänger-Themen 13
G Zugriff auf eine Klasse beschränken. Java Basics - Anfänger-Themen 6
A Konstruktorübergabe von einer klasse an eine andere Java Basics - Anfänger-Themen 2
G Eine Klasse als Rückgabetyp? Java Basics - Anfänger-Themen 12
G Java Klasse durch eine andere Java Klasse starten? Java Basics - Anfänger-Themen 13
W Klasse in eine extra Java-Datei Java Basics - Anfänger-Themen 21
B Wie aus instanzierter Klasse eine Methode der Main-Klasse Java Basics - Anfänger-Themen 9
philipp Wie kann ich eine Funktion einer Klasse benutzen ? Java Basics - Anfänger-Themen 2
MasterEvil Eine Klasse von mehreren Klassen ableiten? Java Basics - Anfänger-Themen 12
M Methode einer Klasse in eine andere Übergeben Java Basics - Anfänger-Themen 4
T Methoden für GUI in eine andere Klasse Java Basics - Anfänger-Themen 2
H Was ist nocheinmal eine statische Klasse? Java Basics - Anfänger-Themen 6
S Variablenwert von einer Klasse in eine andere Klasse geben Java Basics - Anfänger-Themen 2
I eine Klasse aus der Jar-Datei aus dem Servlet starten Java Basics - Anfänger-Themen 4
M Braucht jede Klasse eine Schnittstelle ? Java Basics - Anfänger-Themen 4
C Methoden von verschieden Klassen in eine Klasse reinpacken? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben