Heim  >  Artikel  >  Java  >  Informationen zum Java-Programmier-IO-Stream

Informationen zum Java-Programmier-IO-Stream

高洛峰
高洛峰Original
2017-02-27 15:40:521185Durchsuche

In diesem Artikel werden hauptsächlich die relevanten Informationen zum IO-Fluss der Java-Programmierung im Detail vorgestellt. Freunde, die sie benötigen, können sich auf

detaillierte Java-IO-Erklärung beziehen:

Java Klassen oder Schnittstellen im Zusammenhang mit Stream-Operationen:

Java 编程之IO流资料

Java-Stream-Klassendiagrammstruktur:

Java 编程之IO流资料

Das Konzept von Stream und Funktion

Ein Stream ist eine Menge aufeinanderfolgender Bytes mit einem Startpunkt und einem Endpunkt. Es ist ein allgemeiner Begriff oder eine Zusammenfassung für die Datenübertragung. Das heißt, die Übertragung von Daten zwischen zwei Geräten wird als Stream bezeichnet. Das Wesentliche eines Streams ist die Datenübertragung. Entsprechend den Merkmalen der Datenübertragung wird der Stream in verschiedene Kategorien unterteilt, um intuitivere Datenoperationen zu ermöglichen.

Klassifizierung von IO-Streams

  • Entsprechend den verschiedenen verarbeiteten Datentypen wird es unterteilt in: Zeichenstrom und Bytestrom

  • Je nach unterschiedlicher Datenflussrichtung wird es unterteilt in: Eingabestrom und Ausgabestrom

Zeichenstrom und Bytestrom

Der Ursprung des Zeichenstroms: Aufgrund unterschiedlicher Datenkodierungen gibt es Stream-Objekte, die effiziente Operationen an Zeichen durchführen. Der Kern besteht tatsächlich darin, die angegebene Codetabelle beim Lesen anhand des Bytestroms zu überprüfen. Der Unterschied zwischen Byte-Stream und Zeichen-Stream:

  • Die Lese- und Schreibeinheiten sind unterschiedlich: Der Byte-Stream ist die Einheit in Bytes (8 Bit), der Zeichen-Stream ist die Einheit in Zeichen Einheit und die Zeichen werden gemäß der Codetabelle zugeordnet. Es können mehrere Bytes gleichzeitig gelesen werden.

  • Die Verarbeitungsobjekte sind unterschiedlich: Der Bytestream kann alle Arten von Daten verarbeiten (z. B. Bilder, AVI usw.), während der Zeichenstream nur Daten vom Typ Zeichen verarbeiten kann.

Fazit: Solange Sie mit Klartextdaten arbeiten, geben Sie der Verwendung von Zeichenströmen Vorrang. Ansonsten werden Bytestreams verwendet.

Eingabestream und Ausgabestream

Der Eingabestream kann nur gelesen werden, und der Ausgabestream kann nur geschrieben werden. Das Programm muss je nach den unterschiedlichen Eigenschaften der Daten unterschiedliche Streams verwenden übermittelt werden.

Java IO Stream-Objekt

1. Eingabebyte-Stream Das Vererbungsdiagramm des Eingabebyte-Streams in InputStreamIO ist in der obigen Abbildung zu sehen:

  1. InputStream ist die übergeordnete Klasse aller Eingabebyteströme, es ist eine abstrakte Klasse.

  2. ByteArrayInputStream, StringBufferInputStream und FileInputStream sind drei grundlegende Medienströme. Sie lesen Daten aus Byte-Arrays, StringBuffer bzw. lokalen Dateien. PipedInputStream liest Daten aus einer Pipe, die mit anderen Threads geteilt wird. Kenntnisse im Zusammenhang mit Piped werden später separat vorgestellt.

  3. ObjectInputStream und alle Unterklassen von FilterInputStream sind Dekorationsströme (die Protagonisten des Dekoratormusters). 2. Ausgabebyte-Stream OutputStream

Das Vererbungsdiagramm des Ausgabebyte-Streams in IO ist in der Abbildung oben zu sehen. Es ist zu sehen, dass:

OutputStream ist Der gesamte Ausgabebyte-Stream ist die übergeordnete Klasse von , einer abstrakten Klasse. ByteArrayOutputStream und FileOutputStream sind zwei grundlegende Medienströme. Sie schreiben Daten in Byte-Arrays bzw. lokale Dateien. PipedOutputStream schreibt Daten in eine Pipe, die mit anderen Threads geteilt wird. ObjectOutputStream und alle Unterklassen von FilterOutputStream sind Dekorationsströme. 3. Die Entsprechung zwischen der Eingabe und Ausgabe des Bytestroms

Java 编程之IO流资料

Der blaue Teil im Bild ist der Hauptentsprechungsteil und der rote Teil ist der nicht entsprechende Teil . Die violette gepunktete Linie zeigt an, dass diese Streams im Allgemeinen zusammen verwendet werden . Wie aus der obigen Abbildung ersichtlich ist, ist der Bytestrom in Java IO äußerst symmetrisch. „Existenz und Vernünftigkeit“ Werfen wir einen Blick auf einige der weniger symmetrischen Klassen in diesen Byteströmen!

1.LineNumberInputStream vervollständigt hauptsächlich das Lesen von Daten aus dem Stream und erhält die entsprechende Zeilennummer. Wann und wo verzweigt werden soll, wird aktiv durch den Klassenwechsel bestimmt, und es gibt keine solche im ursprüngliche Zeilennummer. Es gibt keinen entsprechenden Teil im Ausgabeteil. Wir können selbst einen LineNumberOutputStream erstellen. Beim ersten Schreiben wird der nächsten Zeile eine Zeilennummer hinzugefügt. Es scheint in Ordnung zu sein. Es scheint noch weniger beliebt zu sein.

2. Die Funktion von PushbackInputStream besteht darin, das letzte Byte zu überprüfen und es in den Puffer zu legen, wenn es nicht erfüllt ist. Wird hauptsächlich in den Syntax- und lexikalischen Analyseteilen des Compilers verwendet. Der BufferedOutputStream im Ausgabeteil implementiert fast ähnliche Funktionen.

3.StringBufferInputStream ist veraltet und sollte nicht im InputStream-Teil erscheinen, hauptsächlich weil String zum Bereich des Zeichenstroms gehören sollte. Es ist veraltet und wird im Ausgabeteil natürlich nicht benötigt! Es darf auch existieren, nur um die Abwärtskompatibilität der Versionen aufrechtzuerhalten.

4.SequenceInputStream kann als eine Toolklasse betrachtet werden, die zwei oder mehr Eingabestreams nacheinander als einen Eingabestream liest. Es kann vollständig aus dem IO-Paket entfernt werden und hat keinen Einfluss auf die Struktur des IO-Pakets, sondern macht es „reiner“ – reiner Decorator-Modus.

5.PrintStream kann auch als Hilfswerkzeug betrachtet werden. Es kann hauptsächlich Daten in andere Ausgabestreams oder FileInputStream schreiben, und seine interne Implementierung wird weiterhin gepuffert. Im Wesentlichen handelt es sich lediglich um ein Werkzeug zur umfassenden Anwendung anderer Streams. Sie können auch IO-Pakete rausschmeißen! System.out und System.out sind Instanzen von PrintStream!

4. Zeicheneingabestrom Reader

Wie im Vererbungsdiagramm oben zu sehen ist:

1.Reader ist der übergeordnete Zeichenstrom aller Eingabezeichenströme Klasse von , die eine abstrakte Klasse ist.

2.CharReader und StringReader sind zwei grundlegende Medienströme, die Daten aus dem Char-Array bzw. String lesen. PipedReader liest Daten aus einer Pipe, die mit anderen Threads geteilt wird.

3.BufferedReader ist offensichtlich ein Dekorator. Er und seine Unterklassen sind für die Dekoration anderer Reader-Objekte verantwortlich.

4.FilterReader ist die übergeordnete Klasse aller benutzerdefinierten Dekorationsströme. Seine Unterklasse PushbackReader dekoriert das Reader-Objekt und fügt eine Zeilennummer hinzu.

5.InputStreamReader ist eine Brücke, die den Byte-Stream und den Zeichen-Stream verbindet. Er wandelt den Byte-Stream in einen Zeichen-Stream um. Man kann sagen, dass FileReader eine häufig verwendete Werkzeugklasse ist, um diese Funktion zu erreichen. In seinem Quellcode wird offensichtlich die Methode zum Konvertieren von FileInputStream in Reader verwendet. Wir können bestimmte Tricks aus dieser Klasse lernen. Die Zwecke und Verwendungsmethoden jeder Klasse in Reader sind grundsätzlich dieselben wie in InputStream. Später wird es eine entsprechende Beziehung zwischen Reader und InputStream geben. 5. Zeichenausgabestrom Writer

Wie im obigen Beziehungsdiagramm zu sehen ist:

1.Writer ist die übergeordnete Klasse aller Ausgabezeichenströme und eine abstrakte Klasse.

2.CharArrayWriter und StringWriter sind zwei grundlegende Medienströme. Sie schreiben Daten in das Char-Array bzw. den String. PipedWriter schreibt Daten in eine Pipe, die mit anderen Threads geteilt wird.

3.

4.PrintWriter und PrintStream sind sich sehr ähnlich, und auch ihre Funktionen und Verwendungen sind sehr ähnlich.

5. OutputStreamWriter ist die Brücke für die Konvertierung von OutputStream in Writer. Seine Unterklasse FileWriter ist tatsächlich eine spezielle Klasse, die diese Funktion implementiert (Sie können SourceCode für Details studieren). Die Funktionen und Verwendung sind OutputStream sehr ähnlich und die entsprechenden Diagramme werden später gezeigt. 6. Entsprechung zwischen Eingabe und Ausgabe des Zeichenstroms

Java 编程之IO流资料

7. Zeichenstrom- und Bytestromkonvertierung

Eigenschaften des Konvertierungsstroms:

  1. Es ist eine Brücke zwischen Zeichenstrom und Bytestrom

  2. Kann die gelesenen Bytedaten durch eine bestimmte Codierung in Zeichen umwandeln

  3. kann die gelesenen Zeichendaten durch die angegebene Codierung in Bytes konvertieren

Wann soll der Konvertierungsstream verwendet werden?

  1. Wenn es eine Konvertierungsaktion zwischen Bytes und Zeichen gibt

  2. Wenn die Daten der Stream-Operation kodiert oder dekodiert werden müssen.

Spezifische Objektverkörperung:

  1. InputStreamReader:Byte-zu-Zeichen-Brücke

  2. OutputStreamWriter:Character to Byte Bridge

Diese beiden Stream-Objekte sind Mitglieder des Zeichensystems und selbst Es handelt sich also um einen Zeichenstrom Sie müssen während der Erstellung ein Bytestream-Objekt übergeben.

8.Dateiklasse

Die Dateiklasse ist ein Objekt, das Dateien und Ordner im Dateisystem kapselt. Dateien und Ordner können durch die Idee von Objekten manipuliert werden . Die File-Klasse speichert verschiedene Metadateninformationen von Dateien oder Verzeichnissen, einschließlich Dateiname, Dateilänge, Zeitpunkt der letzten Änderung, ob sie lesbar ist, Abrufen des Pfadnamens der aktuellen Datei, Bestimmen, ob die angegebene Datei vorhanden ist, Abrufen der Dateiliste in aktuelles Verzeichnis und Erstellen, Löschen von Dateien und Verzeichnissen usw.

9.RandomAccessFile-Klasse

Dieses Objekt ist kein Mitglied des Stream-Systems. Es kapselt den Byte-Stream und kapselt auch einen Puffer (Zeichenarray). Daten im Zeichenarray durch den internen Zeiger. Merkmale dieses Objekts:

Dieses Objekt kann nur Dateien bearbeiten, daher erhält der Konstruktor zwei Arten von Parametern: a. Dieses Objekt kann Dateien sowohl lesen als auch schreiben. Beim Instanziieren des Objekts können Sie den Operationsmodus (r, rw) angeben

Hinweis: Das Objekt wird instanziiert, wenn die Datei bedient werden soll Wenn die Datei nicht vorhanden ist und der Speicherort der Schreibdaten nicht angegeben ist, wird sie von Anfang an geschrieben, dh der ursprüngliche Inhalt wird überschrieben. kann zum Multi-Thread-Download oder zum gleichzeitigen Schreiben von Daten in Dateien durch mehrere Threads verwendet werden.

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, vielen Dank für Ihre Unterstützung dieser Website!

Weitere Artikel zu Java-Programmier-IO-Flow-Informationen finden Sie auf der chinesischen PHP-Website!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn