Java, wie viele moderne SprachenProgrammierung, unterstützt die Implementierung von Dateneingabeströmen. In Java ist InputStream die Basisklasse für Byte-Streams. Diese Klasse ist abstrakt, dh im Prozess des Programms können wir ihre Instanz nicht erstellen. Im io-Paket gibt es 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 für die InputStream-Klasse

Bevor Sie zu einer detaillierten Studie übergehenInputklassenmethoden, sollte erwähnt werden, dass es Verschließbare und AutoCloseable Schnittstellen implementiert. Schnittstelle Verschließbare sagt uns, dass mit dem Fluss der es bei der Durchführung der Arbeiten muss unbedingt geschlossen werden. Dies geschieht mit Hilfe einer Methode schließen () verwenden. Da die meisten Inputstream-Klassenmethoden im Falle eines Fehlers erzeugt eine Ausnahmetyp IOException, alle Operationen erforderlich, um eine try-Block und ein Verfahren der Nähe der Leitung () schließlich eine Einheit bilden, so dass sie auf das Ergebnis der Operation ausgelöst wird, abhängig Körper zu versuchen.

Die AutoCloseable-Schnittstelle wird erheblich reduziertDie Menge an technischem Code, da die close () -Methode automatisch ausgeführt werden kann und Ihrem Code kein finally-Block hinzugefügt wird. Wenn Sie eine siebte oder höhere Version von Java verwenden, können Sie den InputStream in einen sogenannten try with resources stellen, der sich um alle Abschlussoperationen kümmert.

Java-Eingangsstrom zu Zeichenfolge

Berücksichtigen Sie die Hauptmethoden der InputStream-Klasse:

  • int available () - Gibt die Anzahl der zum Lesen verfügbaren Bytes zurück;
  • int read () - nimmt von der Ressource das aktuelle Byte und gibt es in der Integer-Darstellung zurück; Wenn alle Bytes gelesen werden, wird -1 zurückgegeben;
  • int read (byte [] buffer) - liest die verfügbaren Bytes einspezifizierter Puffer als ein Array vom Typ Byte (die Anzahl der gelesenen Bytes entspricht der Größe des angegebenen Puffers; gibt die Anzahl der gelesenen Bytes zurück; wenn alle verfügbaren Bytes gelesen werden, wird -1 zurückgegeben);
  • int read (byte [] Puffer, int offset, intAnzahl der Bytes) - die Überladung der vorherigen Methode macht das selbe, aber mit der in "offset" angegebenen Position und liest so viele, wie in der "Anzahl der Bytes" angegeben;
  • langer Übersprung (lange Anzahl von Bytes) - Überspringt die angegebene Anzahl von Bytes und gibt die tatsächliche Anzahl an Bytes zurück.

InputStream wird von mehreren Klassen implementiert, um mit verschiedenen Quellen und Datentypen zu arbeiten. Der Baum der Vererbung ist unten dargestellt.

Java-Eingangsstrom

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 Dateinamen als Argument an den Konstruktor zu übergeben. Wenn die Datei mit dem angegebenen Namen nicht existiert, wird eine Ausnahme vom Typ FileNotFoundException ausgelöst.

Im Falle eines erfolgreichen Öffnens einer Datei wird mit den oben beschriebenen Methoden gearbeitet, da FileInputStream der Nachfolger von InputStream ist.

Primitive Datentypen lesen

Das vorherige Beispiel beschrieb die Arbeit mitByte-Werte, die als Symbole interpretiert werden können. Was aber, wenn wir einen ganzzahligen, gebrochenen oder logischen Wert lesen müssen? Dazu wird Java InputStream indirekt um die DataInputStream-Klasse erweitert. Diese Klasse ist der Wrapper für den InputStream, der an ihn übergeben wird, wenn er als Argument für den Konstruktor erstellt wird. Diese Art von Stream liest die Daten in binärer Form.

DataInputStream implementiert auch die DataInput-Schnittstelle und ihre Methoden zum Lesen primitiver Datentypen. Im Folgenden finden Sie eine Liste dieser Methoden.

Java Io Eingangsstrom

Die Namen der Methoden sprechen für sich - jeder von ihnen ist für das Lesen einer bestimmten Art von Daten bestimmt.

Gepufferter Eingangsstrom

Der gepufferte Datenlesestrom ist implementiertdie BufferedInputStream-Klasse in Java. Der inputStream ist in diese Klasse eingeschlossen. Diese Klasse ergänzt den Fluss mit einem Puffer, mit dem Sie mehr als ein Byte gleichzeitig lesen können. Dies ermöglicht es, die Leistung der Operation signifikant zu verbessern. BufferedInputStream ist ein indirekter Abkömmling 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 verstehen, dass die erste die Puffergröße standardmäßig festlegt und dass die zweite Größe manuell eingestellt werden kann.

Fazit

Wir haben die grundlegende Implementierung von InputStream behandelt. Wenn Sie die empfangenen Bytes in eine Zeichenfolge konvertieren müssen, dann in Java InputStream to String () ist leider nicht überladen, deshalb müssen Sie spezielle Utilities verwenden, zum Beispiel IOUtils aus der Apache Commons-Bibliothek.</ span </ p>