2013-02-26 18 views
7

Ich habe eine Anwendung erstellt, die Byte-Arrays in meiner SQLiteDatabase speichert. Diese Anwendung wählt auch die Byte-Arrays aus der Datenbank alle x Sekunden aus.Füllen eines Bytes [] mit mehreren Bytes [] s

Die Datenfluß meiner Anwendung ist wie folgt:

Applikation -> SQLiteDatabase -> Anwendung

Meine Frage ist:

Wie fülle ich ein Byte Array mit allen eingehenden Byte-Arrays aus der SQLiteDatabase?

Zum Beispiel:

Byte[] Data; 

Bedürfnisse mit dem folgende Byte-Array gefüllt werden:

Byte[] IncomingData; 

IncomingData ständig von den gefüllt wird SQLiteDatabase.

Die Daten müssen ständig mit IncomingData gefüllt werden.

Kann mir jemand helfen?

+0

Was bedeutet "füllen"? Willst du sie mitnehmen? – usr

+0

Ja, zum Beispiel in einer Zeichenfolge wäre es wie folgt: string str1 = "12"; Zeichenfolge str2 = "13"; Wenn Sie sie anhängen würden, wäre das Ergebnis: 1213, ich brauche dasselbe mit meinem Byte-Array – Max

+1

Warum nicht einfach eine Liste von Bytes verwenden? – James

Antwort

4

Verwenden Sie einfach Concat:

data1.Concat(IncomingData); 

Sie werden den System.Linq Namespace Referenz hinzufügen müssen.

+0

Ich habe System.Linq hinzugefügt, wenn ich "data1" eintippe. der intelli sense wird mir mit Concat helfen, aber es erfordert "<>", was in diesen geschweiften Klammern eingefügt werden muss? – Max

+0

+1 Ich dachte Memory-Streams und alles – Liam

+1

@mobstaa nur als Referenz, die <> sind die angegebenen generischen Typ – Liam

4

Es gibt ein paar Ansätze, die Sie ergreifen können.

  1. verwenden, um einen List<byte> und List.AddRange
  2. Ilses LINQ Enumerable.Concat
  3. Verwenden Array.Copy und das alles manuell

Von den drei, wenn möglich mit den List gehen, wie es (wahrscheinlich) reduzieren die Menge an erforderlichem Array-Kopieren. Dafür sind Listen gemacht, sie verwenden ein Array hinter den Kulissen mit einem bestimmten capacity, es beginnt bei 4 und verdoppelt sich, wenn es die Kapazität erreicht. Die Kapazität kann sogar auf eine große Zahl mit der list.Capacity-Eigenschaft oder dem Konstruktor gesetzt werden, der einen int ähnlich wie Sie mit einem Array nimmt. Sie können die Liste immer mit List.ToArray zurückbringen.

Enumerable.Concat wird wahrscheinlich nur ein Array der Mindestgröße erstellen, was bedeutet, dass jedes Mal ein neues Array erstellt werden muss, wenn Sie weitere byte s erhalten.

+0

Warum ist der Overhead der Konvertierung in Listen? Wie du sagst, benutzen sie sowieso Arrays im Hintergrund. – mattytommo

+0

Eigentlich ist es 'ToArray' nicht' AsArray'. – juharr

+0

.Concat wird immer ein neues Array von den beiden erstellen, wenn dies alle paar Sekunden geschieht, was viel Kopieren bedeutet. Eine Liste kann mit einer Kapazität initialisiert werden und wird nur dann kopiert, wenn diese Kapazität erreicht ist. Ja, ToArray. –