/ / Java: InputStream. Eingabestreams

Java: InputStream. Eingabeströme

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.

Methoden der InputStream-Klasse

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.

Java Inputstream zu String

Betrachten Sie die grundlegenden Methoden der InputStream-Klasse:

  • int available () - gibt die Anzahl der zum Lesen verfügbaren Bytes zurück;
  • int read () - Nimmt das aktuelle Byte von der Ressource und gibt es in einer Ganzzahldarstellung zurück. Wenn alle Bytes gelesen wurden, wird -1 zurückgegeben.
  • int read (byte [] buffer) - liest verfügbare Bytes einder angegebene Puffer als Array vom Typ Byte (die Anzahl der gelesenen Bytes entspricht der Größe des angegebenen Puffers; gibt die Anzahl der zu lesenden Bytes zurück; wenn alle verfügbaren Bytes gelesen wurden, wird -1 zurückgegeben);
  • int read(byte[] буфер, int смещение, int Anzahl der Bytes) - Überladen der vorherigen Methode, macht das gleiche, aber von der im "Offset" angegebenen Position und liest so viel, wie in der "Anzahl der Bytes" angegeben ist;
  • long skip (lange Anzahl von Bytes) - überspringt die angegebene Anzahl von Bytes und gibt die tatsächliche Anzahl der übersprungenen Bytes zurück.

InputStream wird von mehreren Klassen implementiert, die für die Arbeit mit verschiedenen Quellen und Datentypen ausgelegt sind. Unten ist der Vererbungsbaum.

Java Inputstream

Dateien lesen

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.

Primitive Datentypen lesen

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.

Java IO Inputstream

Die Namen der Methoden sprechen für sich - jede von ihnen ist darauf ausgelegt, einen bestimmten Datentyp zu lesen.

Gepufferter Eingabestream

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:

  • BufferedInputStream (InputStream-Eingabestream);
  • BufferedInputStream (InputStream-Eingabestream, int-Puffergröße)

Anhand der Signatur der Konstruktoren können Sie erkennen, dass die erste die Standardpuffergröße festlegt und die zweite sie manuell festlegen kann.

Fazit

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.

Mochte:
0
Beliebte Beiträge
Spirituelle Entwicklung
Essen
Ja