Datentypen bits, bytes, chars - Verständnisfrage

grisu

Mitglied
Hallo zusammen!

Ich beschäftige mich nebenbei immer wieder gern mit Java, bin gerade dabei, das I/O System durchzugehen, bin durch Zufall auf diese Frage gekommen.

Folgender Code:
Java:
DataInputStream dis = new DataInputStream (new FileInputStream (new File ("C:/xampp/htdocs/workspace/javaFiles/poem.txt")));

String s = "";
while (dis.available() != 0)
	s += (char) dis.readByte();
			
System.out.println (s);
Jetzt fallen natürlich die Umlaute weg, weil Umlaute größer als ein byte sind (in UTF-8/16). Richtig verstanden?

Java:
String s = "";
while (dis.available() != 0)
{
	byte b = dis.readByte();
	System.out.println (Integer.toBinaryString(b));
	s += (char) b;
}
Jetzt wirds spannend ;)
Hier hab ich für die Umlaute 4 bytes in der Console. Wie kann ein byte auf einmal 4 bytes groß sein? Hängt das mit dem Cast nach int zusammen? Aber wenn ich ein byte lese, und dann nach int caste, wirds zwar größer, aber es kann ja nicht auf einmal einen anderen Wert annehmen?
Und generell, wenn ein char 2 bytes groß ist, und die Umlaute 4 bytes lang sind, wie geht sich das dann aus?
Und noch eine Frage: Mein Textfile ist UTF-8. Laut Wiki ist für ein 1-byte-großes Zeichen das höchste bit 0. Bei mir in der Console allerdings nicht. Warum?

Nächster Code:
Java:
String s = "";
while (dis.available() != 0)
{
	s += (char) dis.read();
}
			
System.out.println (s);
Jetzt gehts auf einmal. "Reads the next byte of data from this input stream. The value byte is returned as an int in the range 0 to 255". Aber wenn die Umlaute 4 bytes groß sind, er es als ein byte einliest und dann als int zurückgibt...??


Ich blick nicht mehr durch. Hilfe! :)
Danke!

Liebe Grüße
grisu
 
S

SlaterB

Gast
gehts bei allem einen Tick genauer?
welche Eingaben, welche Ausgaben??

wenn du Ausgaben wie
1100101
hast, dann sind das ja nur 7 bit, das höchste ist nicht ausgegeben, ist die 0, wie im Wiki angegeben

mit '4 Byte groß' meinst du vielleicht Ausgaben a la
11111111111111111111111111000011
das ist ein negatives Byte, als int sieht das eben so aus,
an den vielen 1en erkennt man doch, dass da zu 75% keine sinnvolle Information drinsteht,
nur die letzten 8 Bits haben Inhalt, eben genau ein Byte

edit:
die postiven Bytes, also z.B. 1100101, müßten eigentlich auch als
00000000000000000000000001100101
dargestellt werden, das Kürzen der Nullen ist ganz schön nervig

-------

> Jetzt fallen natürlich die Umlaute weg, weil Umlaute größer als ein byte sind (in UTF-8/16). Richtig verstanden?

ich denke ja
 
Zuletzt bearbeitet von einem Moderator:

grisu

Mitglied
gehts bei allem einen Tick genauer?
welche Eingaben, welche Ausgaben??

wenn du Ausgaben wie
1100101
hast, dann sind das ja nur 7 bit, das höchste ist nicht ausgegeben, ist die 0, wie im Wiki angegeben

mit '4 Byte groß' meinst du vielleicht Ausgaben a la
11111111111111111111111111000011
das ist ein negatives Byte, als int sieht das eben so aus,
an den vielen 1en erkennt man doch, dass da zu 75% keine sinnvolle Information drinsteht,
nur die letzten 8 Bits haben Inhalt, eben genau ein Byte

Hm das mit den 7 bit stimmt, das hab ich irgendwie übersehen. Dumme Frage: Woran erkennt man ein negatives byte in Java? An der 1 im höchsten bit?


Nochmal ein Beispiel:
Java:
DataInputStream dis = new DataInputStream (new FileInputStream (new File ("C:/xampp/htdocs/workspace/javaFiles/poem.txt")));
			
String s = "";
while (dis.available() > 0)
{
	int b = dis.read ();
        System.out.println (Integer.toBinaryString(b) + " - " + b);
	s += (char) b;
}
			
System.out.println (s);

//Ausgabe:
11111100 - 252    //üüüäüäüäüäü
11111100 - 252
11111100 - 252
11100100 - 228
11111100 - 252
11100100 - 228
11111100 - 252
11100100 - 228
11111100 - 252
11100100 - 228
11111100 - 252
etc.

Ich glaub ich komm der Sache näher. Mal ganz langsam von vorne:
Ein Umlaut-u hat den Wert 252. Wenn ich 252 nach byte caste, ergibt das -4, das ist genau das negative byte, das du oben angesprochen hast. Das ergibt natürlich keinen char, weil chars nur positive Werte haben.
Der Unterschied im letzten Beispiel ist also der, das er wirklich den byte-Wert ausliest und als int zurückgibt. Als int deshalb, weil ein byte eben von 0-255 geht, und nicht von -128 bis 127, wie ein "byte" in Java. Richtig?
 

Landei

Top Contributor
Dumme Frage: Woran erkennt man ein negatives byte in Java? An der 1 im höchsten bit?
Ja, aber der Rest ist nicht einfach die zugehörige positive Zahl, das höchste Bit funktioniert nicht einfach als Vorzeichen.

Einzelheiten: Zweierkomplement ? Wikipedia

Und das ist wirklich keine dumme Frage. Ich würde mir wünschen, dass das jeder Programmierer das wüsste, aber ich habe schon viele "alte Hasen" erlebt, die mit Bit-Operationen und char-Konvertierungen so ihre Schwierigkeiten hatten.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Datentypen Int oder String in Bits/Bytes umwandeln Java Basics - Anfänger-Themen 10
I Wie viele 1 an Bits hat die Zahl x? Java Basics - Anfänger-Themen 5
D Erste Schritte Operatoren zur Manipulation von Bits "~" Java Basics - Anfänger-Themen 5
O Einzelne Bits umwandeln und prüfen Java Basics - Anfänger-Themen 23
J Bits zusammen zählen Java Basics - Anfänger-Themen 4
L Byte[] to String, doch bits sind gespiegelt (MSB/LSB) Java Basics - Anfänger-Themen 3
A Länge einer Hexadezimalzahl in Bits Java Basics - Anfänger-Themen 40
R einzelne Bits prüfen Java Basics - Anfänger-Themen 12
B Wieviele bits belegen die Datentypen? Java Basics - Anfänger-Themen 2
P Bits bei BigInteger abprüfen Java Basics - Anfänger-Themen 2
I Bits lesen und schreiben Java Basics - Anfänger-Themen 6
M Bytes inkrementieren Java Basics - Anfänger-Themen 2
F ByteBuffer Fehler bei den letzten 2 Bytes Java Basics - Anfänger-Themen 1
P bytes aus einem InputStream zählen Java Basics - Anfänger-Themen 2
M Zahlen als Bytes in eine Datei speichern, daraus wieder auslesen Java Basics - Anfänger-Themen 2
A Char Bytes Umwandlung und Darstellung Java Basics - Anfänger-Themen 3
F Datei einlesen ( Bytes ) Java Basics - Anfänger-Themen 12
R Input/Output verschiedene Datentypen als Bytes in Datei speichern Java Basics - Anfänger-Themen 15
L Bytes zu String, String zu Bytes Java Basics - Anfänger-Themen 11
F code Optimierung (Bin-Hex-Bytes) Java Basics - Anfänger-Themen 9
2 Bestimmte Anzahl von Bytes lesen und als string ausgeben? Java Basics - Anfänger-Themen 3
A begrenzte Datenstruktur zur Speicherung von bytes Java Basics - Anfänger-Themen 6
I &-Zeichen und Bytes und co Java Basics - Anfänger-Themen 4
D Bytes für WAV Format anpassen Java Basics - Anfänger-Themen 5
F Bytes speichern Java Basics - Anfänger-Themen 5
S Problem mit url, inputStream und bytes beim Quellcode laden. Java Basics - Anfänger-Themen 6
P Hochgeladene Bytes anzeigen Java Basics - Anfänger-Themen 15
T Bytearray: immer 4 Bytes herrauskopieren, bis fertig ! Java Basics - Anfänger-Themen 9
N Bytes in einem String Java Basics - Anfänger-Themen 3
M Aus einem Array von "bytes" ein "short" Java Basics - Anfänger-Themen 4
G Array von Bytes in String umwandeln Java Basics - Anfänger-Themen 4
A formatieren long(bytes) -> String Java Basics - Anfänger-Themen 2
D Text-Datei(en) mit der Methode read(bytes[] b) auslesen Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
S Chars vergleichen ohne Betrachtung der Groß und Kleinschreibung Java Basics - Anfänger-Themen 7
JaVaN0oB Wörterraten - Falsche Ausgabe, String/Chars vergleichen Java Basics - Anfänger-Themen 2
J erstes Vorkommen eines Chars aus einem String entfernen Java Basics - Anfänger-Themen 3
J erstes Vorkommen eines chars entfernen Java Basics - Anfänger-Themen 1
S Byte-Array kann chars speichern? Java Basics - Anfänger-Themen 3
J String Methode chars() Java Basics - Anfänger-Themen 8
C Chars in einem String alphabetisch sortieren Java Basics - Anfänger-Themen 1
C Chars eines Strings mit for schleife rückwärts auslesen Java Basics - Anfänger-Themen 8
J Haben Chars wirklich keine KeyCodes? Java Basics - Anfänger-Themen 12
P Wie reagiere ich auf Strings mit zu vielen Chars ? Java Basics - Anfänger-Themen 6
J Alle Vorkommen eines chars in einem Array durch einen anderen char ersetzen Java Basics - Anfänger-Themen 10
B chars auf Zahlen überprüfen Java Basics - Anfänger-Themen 4
Developer_X Die Kunst der Alten Runen in Chars, leider nicht in String konvertierbar? Java Basics - Anfänger-Themen 28
G wie chars mit einer menge von chars vergleichen Java Basics - Anfänger-Themen 9
X txt. mit Strings und Chars einlesen? Java Basics - Anfänger-Themen 3
H Zahlnwert eines chars Java Basics - Anfänger-Themen 5
J int-kette in chars umwandeln Java Basics - Anfänger-Themen 10
Bierhumpen chars vergleichen Java Basics - Anfänger-Themen 8
C Frage zu: String einlesen -> Array von Chars erhalten Java Basics - Anfänger-Themen 4
R Eingabe eines Chars mit Überprüfung Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben