Laden...

Werte aus "Stream"-Array auslesen

Erstellt von JDizzle vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.238 Views
J
JDizzle Themenstarter:in
15 Beiträge seit 2005
vor 18 Jahren
Werte aus "Stream"-Array auslesen

Hi,

ich hab eine Socketverbindung zwischen einem PDA und einem Server. Hier will ich ein Objekt übertragen. Momentan mach ich das so, dass ich die Werte des Objekts in einen Memorystream packe, aus diesem dann mit ToArray() ein ByteArray erstelle und dieses ByteArray verschicke ich dann. Es kommt auch beim Server an.

Mein Problem ist jetzt, wie ich die Daten aus dem Array wieder rausbekomme, da der Stream das ohne Positionierung in den Array schreibt.

Hab mal testweise versucht die ByteLänge von einem der umgewandelten Werte auszulesen und aus dem Stream einen Bytestring dieser Länge rauszuholen. Aber da kommt nix bei raus.

Hoffe jemand kann mir helfen.

J
JDizzle Themenstarter:in
15 Beiträge seit 2005
vor 18 Jahren

Je mehr ich andere Möglichkeiten zur Übertragung ausprobiere, desto öfter scheitere ich. Im Compact Framework gibts so ziemlich keine Serialisierungsmethoden, weder BinaryFormatter noch XmlSerializer. X(

P
939 Beiträge seit 2003
vor 18 Jahren

Hi JDizzle,

gibt es im Compact Framework vielleicht System.IO.BinaryWriter und System.IO.BinaryReader? Mit den beiden Klassen können einfache Datentypen übertragen werden. Man muss nur wissen in welcher Reihenfolge die Daten im Stream liegen.

Hier mal ein Beispiel (das Prinzip angedeutet):

// Data-Struktur.
public struct Data {

   public string FieldA;
   public double FieldB;
   public long FieldC;
  
   public Data(string a, double b, long c) {
      FieldA = a; FieldB = b; FieldC = c;
   }
}


// Zu schreibendes Data-Object.
Data data = new Data("Test", 2.5, 6L);

// In den Stream schreiben.
MemoryStream output = new MemoryStream();
BinaryWriter writer = new BinaryWriter(output);
writer.Write(data.FieldA);
writer.Write(data.FieldB);
writer.Write(data.FieldC);

// Wieder auslesen.
MemoryStream input = new MemoryStream(output.ToArray());
BinaryReader reader = new BinaryReader(input);
string a = reader.ReadString();
double b = reader.ReadDouble();
long c = reader.ReadInt64();

// Ausgelesenes Data-Objekt
Data data2 = new Data(a, b, c);

Gruss
Pulpapex

J
JDizzle Themenstarter:in
15 Beiträge seit 2005
vor 18 Jahren

Tausend Dank. 😁

Das rettet mir meinen Arsch 😉

4.221 Beiträge seit 2005
vor 18 Jahren

Original von JDizzle
Tausend Dank. 😁

Das rettet mir meinen Arsch 😉

Zu Pocket PC und Arsch fällt mir dieser Thread wieder ein.... hab mich halb krumm gelacht dabei:

C# mit .NET auf Windows für Pocket PC 2003

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...