2017-04-25 7 views
0

Während ich ein Java-Buch über Byteströme las, stieß ich auf dieses Beispiel, das das Buch verwendet, um den Unterschied zwischen den beiden zu zeigen. Das verwendete Beispiel ist die Zahl 199. Wenn diese Zahl in den Zeichenstrom geschrieben wird, wird sie gemäß dem Buch als drei verschiedene Zeichen geschrieben: 0x31 0xC7 0x39. Wenn dies jedoch in den Byte-Stream geschrieben wird, wird es als einzelner Wert 0xC7 geschrieben. Mein Zweifel ist, 199 passt nicht in ein Byte in Java. Also, sollte es nicht als zwei Bytes anstelle von einem geschrieben werden? Wird 199 in Byteströmen als 1 Byte oder 2 Byte geschrieben?Verwirrung über Byteströme

+1

Für diese Zwecke ist ein Byte unsigned, also ist es in dem Bereich '0-255' – khelwood

+0

Byte ist in Java signiert, nicht wahr? Wie kann es unsigniert sein? – birraa

+0

Ein _byte_ ist nur 8 Datenbits: Sie können es als eine Zahl zwischen 0 und 255 betrachten, auch wenn der Java-Byte-Typ es anders betrachten würde. – khelwood

Antwort

1

Wenn Sie OutputStream.write(int) aufrufen, was eine Methode zum Schreiben eines einzelnen Bytes ist, ignoriert es alle Bits mit Ausnahme der unteren acht. Das bedeutet, dass 199 und -57 genauso geschrieben werden. Für diese spezielle Methode funktioniert das so, weil es nur ein Byte schreiben soll.

Wenn Sie eine andere Methode aufgerufen haben, wird es anders funktionieren. Zum Beispiel schreibt DataOutputStream.writeInt eine Ganzzahl als vier Bytes, weil das für diese Methode ist.

+0

Ich habe gerade diesen Code versucht: 'int n = 199; OutputStream f3 = neuer FileOutputStream ("file4.txt"); f3.write (n); 'und ja, es schreibt 0xC7 was wie gesagt -57 ist. Also, ist es möglich, 199 selbst mit Byte-Stream (nicht DataOutputStream) zu schreiben? Ich meine, ohne korrumpiert zu werden. – birraa

+1

Sie könnten zwei Bytes schreiben, wenn Sie das wollen. Wie Sie sie zurücklesen, bestimmt, ob Sie sie als zwei Zahlen von je einem Byte oder als eine Anzahl von zwei Bytes (eine "kurze") betrachten. – khelwood