Mag mir jemand erklären, was hier in der letzten Zeile im Hintergrund genau passiert?
Was erhält man, wenn man das herausgelesene Byte mit 1 addiert?
Und inwiefern werden die Bytes dadurch vergleichbar?
Für welche Art von Inhalten (in der "realen" Welt) stehen hier die Bytes?
int[] byteCountArray = new int[256];
try (FileInputStream fileInputStream = new FileInputStream(fileName)) {
while (fileInputStream.available() > 0) {
byteCountArray[fileInputStream.read()] += 1;
}
Was passiert hier genau? (sorry, wahrscheinlich ein Abstraktions-Koller)
Gelöst
Kommentare (1)
- Beliebt
- Neu
- Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Thomas
18 August 2023, 12:01nützlich
Wenn irgendeinen Text aus einer Datei mit einem byte-Stream (hier der FileInputStream) liest, dann bekommst du keine Zeichen wie a, b oder c sondern (vereinfacht) den ASCII-Code des Zeichens. Für abc also 97, 98 und 99.
Jetzt erstellst du ein int array mit 128 (für den basic english Zeichensatz oder hier eben mit 256 für den Erweiterten), also int[] counts = new int[128]. Jeder Index des Arrays steht für einen ASCII Code. Also counts[97] bezieht sich auf a. Ist der Wert von counts[97] == 0, dann gibt es keine Vorkommen von a im gelesenen File. Erhöhst du den Wert von counts[97], also counts[97]++, dann gibt es ein a.
Nun liest du einen Wert vom InputStream, int currentASCIIValue = fileInputStream.read();
Wird z.B. ein B gelesen wird nun der Wert für B um eins erhöht.
counts[currentASCIIValue]++
Das ist schon die ganze Magie... kann man auch mit einer map machen. Wenn man aber einen numerischen Index hat, ist das sinnlos. Ein Array oder eine ArrayList hat den numerischen Index ja schon implizit.
+1