Java, wie viele moderne SprachenProgrammierung, unterstützt die Implementierung von Dateneingabeströmen. In Java ist ein InputStream die Basisklasse für Byte-Streams. Diese Klasse ist abstrakt, dh im Verlauf des Programms können wir keine Instanz davon erstellen. Das io-Paket enthält jedoch viele Klassen, die die Funktionalität von InputStream erben und erweitern. Um diese Klasse in Ihrem Code zu verwenden, müssen Sie sie aus dem Paket java.io.InputStream importieren. Als Nächstes betrachten wir die grundlegenden Funktionen der InputStream-Klasse sowie die Hauptklassen, die sie implementieren.
Bevor Sie eine detaillierte Studie beginnenBei den Methoden der InputStream-Klasse sollte erwähnt werden, dass sie die Schnittstellen Closeable und AutoCloseable implementiert. Die Closeable-Oberfläche teilt uns mit, dass Sie einen Stream schließen müssen, wenn Sie mit der Arbeit fertig sind. Dies geschieht mit der Methode close (). Da die meisten Methoden der InputStream-Klasse im Fehlerfall eine IOException auslösen, müssen alle Operationen im try-Block ausgeführt werden, und die close () -Methode muss im finally-Block abgelegt werden, damit sie unabhängig vom Ergebnis der Arbeit im try-Body funktioniert.
AutoCloseable-Schnittstelle deutlich reduzierttechnischer Code, da die Methode close () automatisch ausgelöst wird und dem Code kein finally-Block hinzugefügt wird. Wenn Sie die siebte oder neuere Version von Java verwenden, kann ein InputStream in einen sogenannten Versuch mit Ressourcen versetzt werden, der alle Vorgänge zum Schließen der Threads erledigt.
Betrachten Sie die grundlegenden Methoden der InputStream-Klasse:
InputStream wird von mehreren Klassen implementiert, die für die Arbeit mit verschiedenen Quellen und Datentypen ausgelegt sind. Unten ist der Vererbungsbaum.
Byte-Stream zum Lesen von Informationen aus Dateienimplementiert von der FileInputStream-Klasse. Um eine Datei zum Lesen von Bytes zu öffnen, genügt es, eine Instanz dieser Klasse zu erstellen und den Namen als Argument an den Konstruktor zu übergeben. Wenn die Datei mit dem übergebenen Namen nicht vorhanden ist, wird eine Ausnahme vom Typ FileNotFoundException ausgelöst.
Bei erfolgreichem Öffnen der Datei wird mit den oben beschriebenen Methoden gearbeitet, da FileInputStream ein Erbe von InputStream ist.
Im vorherigen Beispiel wurde das Arbeiten mit beschriebenByte-Werte, die als Zeichen interpretiert werden können. Aber was ist, wenn wir einen ganzzahligen, gebrochenen oder logischen Wert lesen müssen? Zu diesem Zweck wird in Java ein InputStream indirekt durch die DataInputStream-Klasse erweitert. Diese Klasse ist ein Wrapper für einen InputStream, der beim Erstellen als Argument an den Konstruktor übergeben wird. Diese Art von Stream liest Daten in binärer Form.
DataInputStream implementiert auch die DataInput-Schnittstelle und ihre Methoden zum Lesen primitiver Datentypen. Unten finden Sie eine Liste dieser Methoden.
Die Namen der Methoden sprechen für sich - jede von ihnen ist darauf ausgelegt, einen bestimmten Datentyp zu lesen.
Der gepufferte Datenlesestrom wird implementiert.die BufferedInputStream-Klasse in Java. Ein InputStream wird von dieser Klasse umschlossen. Diese Klasse ergänzt den Stream um einen Puffer, mit dem Sie nicht nur ein, sondern mehrere Bytes gleichzeitig lesen können. Dies ermöglicht es, die Produktivität des Vorgangs signifikant zu steigern. BufferedInputStream ist ein indirekter Nachfolger von InputStream und erbt dementsprechend alle oben genannten Methoden.
Diese Klasse hat zwei Konstruktoren:
Anhand der Signatur der Konstruktoren können Sie erkennen, dass die erste die Standardpuffergröße festlegt und die zweite sie manuell festlegen kann.
Wir haben die wichtigsten Implementierungen von InputStream untersucht. Wenn Sie die empfangenen Bytes in eine Zeichenfolge konvertieren müssen, klicken Sie in Java InputStream to String () ist leider nicht überlastet, daher müssen Sie spezielle Dienstprogramme verwenden, z. B. IOUtils aus der Apache Commons-Bibliothek.