Normal
Beim jedem Aufruf von [c]in.read(buffer)[/c] wird das Byte-Array [c]buffer[/c] neu von vorne befüllt. Immer mit einer neuen Portion aus dem FileInputStream. Die einzulesende Datei darf also selbstverständlich größer sein als der Puffer (im Beispiel 32768 Bytes).Stell dir vor du liest ein Buch, und als Lesehilfe legst du ein Lineal unter die Zeile, die du gerade liest. Diese Buch-Zeile kommt in deinen Puffer. Wenn du den Puffer verarbeitet hast (also die Zeile verstanden hast), schiebst du das Lineal eine Zeile weiter, und dein Puffer wird neu gefüllt. Solange bis das Buch (der InputStream) beendet ist.Das Verschieben des Lineals geschieht in Java automatisch durch den Aufruf von [c]read[/c].Beim Stream-Einlesen wird das Byte-Array [c]buffer[/c] möglicherweise nicht komplett gefüllt, sondern nur teilweise. Die tatsächliche Füllung steht bei deinem Beispiel in [c]numberOfBytes[/c]. Beim Schreiben mit [c]out.write[/c] muss dies beachtet werden, damit keine Null-Bytes in den Ausgabestrom geschrieben werden.
Beim jedem Aufruf von [c]in.read(buffer)[/c] wird das Byte-Array [c]buffer[/c] neu von vorne befüllt. Immer mit einer neuen Portion aus dem FileInputStream. Die einzulesende Datei darf also selbstverständlich größer sein als der Puffer (im Beispiel 32768 Bytes).
Stell dir vor du liest ein Buch, und als Lesehilfe legst du ein Lineal unter die Zeile, die du gerade liest. Diese Buch-Zeile kommt in deinen Puffer. Wenn du den Puffer verarbeitet hast (also die Zeile verstanden hast), schiebst du das Lineal eine Zeile weiter, und dein Puffer wird neu gefüllt. Solange bis das Buch (der InputStream) beendet ist.
Das Verschieben des Lineals geschieht in Java automatisch durch den Aufruf von [c]read[/c].
Beim Stream-Einlesen wird das Byte-Array [c]buffer[/c] möglicherweise nicht komplett gefüllt, sondern nur teilweise. Die tatsächliche Füllung steht bei deinem Beispiel in [c]numberOfBytes[/c]. Beim Schreiben mit [c]out.write[/c] muss dies beachtet werden, damit keine Null-Bytes in den Ausgabestrom geschrieben werden.