2017-09-09 1 views
0

Ich schreibe eine Datei, um Informationen zu Orten auf einer Karte zu speichern, zum Beispiel wo ein Objekt spawnen würde. ich ein Byte in die Datei schreiben und innerhalb des Bytes würde es x und y-Koordinaten, wie würde ich sie aus derSpeichern mehrerer Werte in einem Byte

int typeData = stream.readByte(); 
int x = typeData >> 2; 
int y = typeData & 3; 

dieser Datei zu analysieren ist ein Beispiel dafür, was ich erreichen bin zu wollen. Was bin ich nicht sicher ist, was ich in den Schreibprozess zu tun haben, zum Beispiel

outStream.writeByte((x << 2) + (y | 3)); 

Dies ist ein Beispiel, wurde dieser Code nicht getestet und ist wahrscheinlich falsch.

+0

Mit 2 Bits sind die einzigen möglichen Werte von "y" 0, 1, 2 und 3. Ist das genug? Es ist unklar, warum Sie das Gefühl haben, Werte in Bit-Strings wie diese zu packen. Speicher und Speicherplatz sind ziemlich billig und die Zuweisung eines ganzen "int" zu "x" und "y" sollte kein Problem verursachen. Sie müssen erklären, welches Problem Sie wirklich versuchen, hier zu lösen. –

+0

Das Manipulieren von Bytes ist eine Übung aus der Assembler-Ära. Es gibt absolut keine Notwendigkeit, es heute zu tun. –

+0

Ich habe nur den Parser für einige Informationen aus einer Datei, die ich versuche zu lesen, und möchte einen Schreiber dafür erstellen, damit ich mehr Informationen zu dieser Datei speichern kann, aber wäre es besser, dies neu zu schreiben? – JavaGuy

Antwort

1

Beachten Sie, dass der Byte-Datentyp eine vorzeichenbehaftete 8-Bit-Zweierkomplement-Ganzzahl ist. Daher sind Werte von -128 bis +127 enthalten.

Sie haben also Recht, wenn Sie die bitweisen Operationen mit int Variablen (x und y) berechnen, so: (x << 2) + (y | 3). Dann können Sie in ein Byte umwandeln oder Java das Ergebnis automatisch generieren lassen, nur im letzten Schritt beim Aufruf von writeByte().

Sie benötigen sicherlich mehr als 8 Bits zum Speichern Ihrer Koordinaten. Beachten Sie, dass die ursprüngliche Reihenfolge eines Bytepuffers immer BIG_ENDIAN ist, wenn Sie die standardmäßige Java-API java.nio.ByteBuffer verwenden, um auf Binärdaten zuzugreifen, die in Ihrer Datei gespeichert sind.

+0

Ich bekomme das raus.writeByte ((20 << 2) + (15 & 3)); int daten = dataIn.readByte(); int x = (daten >> 2); int y = (daten >> 2 | 3); // Ausgabe X: 20 Y: 23 sollte 20 und 15 sein – JavaGuy

+0

Verwenden von 2 Bits zum Speichern von 15 ist nicht möglich Verwenden Sie 4 Bits: '(20 << 4) + (15 & (1 << 4 - 1)) '. –

+0

Oh danke :) – JavaGuy

Verwandte Themen