Das Lesen und Schreiben von Binärdatenströmen ist eine der häufigsten E / A-Aufgaben, die eine Java-Anwendung ausführen kann. Dies kann durch Betrachten jedes einzelnen Bytes in einem Stream oder durch Verwenden eines strukturierteren gepufferten Ansatzes durchgeführt werden.
Hinweis: Dieser Artikel befasst sich mit dem Lesen von Binärdaten aus einem
example.jpgDatei. Wenn Sie diesen Code ausprobieren, ersetzen Sie einfach den Namen des
example.jpgmit dem Pfad und Namen einer JPEG-Datei auf Ihrem Computer.
Das
java.ioclass war die erste Java-API, die Input / Output-Funktionen bereitstellte. Es gibt zwei Methoden, mit denen Byte-Streams (8-Bit-Blöcke) von und in eine Datei eingegeben und ausgegeben werden können. Diese Klassen sind die
FileInputStreamund
FileOutputStream. Diese Methoden bieten eine grundlegende Methode für die E / A, indem sie die Ein- oder Ausgabe einer Datei jeweils byteweise ermöglichen. In der Praxis ist es besser, eine gepufferte Methode für Binärströme zu verwenden, aber es empfiehlt sich, den grundlegendsten Baustein der Java-E / A-Funktionalität zu betrachten.
Beachten Sie, wie wir die E / A-Behandlung in a einfügen
versuchen, endlich fangenblock-this dient dazu, sicherzustellen, dass E / A-Ausnahmen behandelt und die Streams ordnungsgemäß geschlossen werden. Der catch-Block zeigt alle aufgetretenen E / A-Ausnahmen an und gibt eine Nachricht für den Benutzer aus. Im finally-Block ist es wichtig, die Streams explizit zu schließen, indem Sie die close-Methode aufrufen, da sie sonst geöffnet bleiben und Ressourcen verschwenden. Es wird geprüft, ob die
FileInputStreamund
FileOutputStreamsind null, bevor versucht wird, zu schließen. Dies liegt daran, dass ein E / A-Fehler auftreten kann, bevor die Streams initialisiert werden. Wenn beispielsweise der Dateiname falsch ist, wird der Stream nicht ordnungsgemäß geöffnet
VersuchenBlock können wir Code hinzufügen, um in den Bytes zu lesen: Die
lesenMethode liest ein Byte aus dem
FileInputStreamund die write-Methode schreibt ein Byte in die
FileOutputStream. Wenn das Dateiende erreicht ist und keine Bytes mehr einzugeben sind, wird der Wert -1 zurückgegeben.
Jetzt, da Java 7 veröffentlicht wurde, können Sie den Nutzen einer seiner neuen Funktionen sehen - den Versuch mit dem Ressourcenblock. Dies bedeutet, dass, wenn wir die Streams zu Beginn für den try-Block identifizieren, dieser das Schließen des Streams für uns übernimmt. Dies macht den finally-Block im vorherigen Beispiel überflüssig:
Die vollständigen Java-Codelisten für die beiden Versionen des Byte-Leseprogramms finden Sie im Binary Stream Example Code.