Heim  >  Artikel  >  Java  >  Java-Eingabestream-Ausgabestream

Java-Eingabestream-Ausgabestream

大家讲道理
大家讲道理Original
2017-05-28 11:28:071548Durchsuche


1. Was ist IO?

E/A-Operationen in Java beziehen sich hauptsächlich auf die Verwendung von Java für Eingabe- und Ausgabevorgänge Datenströme führen Ein- und Ausgaben durch und diese Datenströme stellen eine fließende Folge von Zeichen oder Datenbytes dar. Die I/O-Streams von Java bieten Standardmethoden zum Lesen und Schreiben von Daten. Jedes Objekt in Java, das eine Datenquelle darstellt, stellt Methoden zum Lesen und Schreiben seiner Daten in einem Datenstrom bereit.

Java.io ist das Hauptpaket für die meisten datenflussorientierten Eingabe-/Ausgabeklassen. Darüber hinaus bietet Java auch Unterstützung für die Blockübertragung und Block-E/A wird in der Kernbibliothek java.nio verwendet.

Der Vorteil von Stream IO besteht darin, dass es einfach und benutzerfreundlich ist, der Nachteil besteht jedoch darin, dass es weniger effizient ist. Block-IO ist sehr effizient, aber die Programmierung ist komplizierter.
Java IOModell :
Das IO-Modelldesign von Java ist sehr gut. Es verwendet den Decorator-Modus, um Streams nach Funktion zu unterteilen erforderliche Funktionalität. Wenn Sie beispielsweise einen gepufferten Dateieingabestream benötigen, sollten Sie eine Kombination aus FileInputStream und BufferedInputStream verwenden.



2. Grundkonzepte des Datenflusses

Der Datenfluss ist eine Sammlung kontinuierlicher Daten, genau wie der Wasserfluss in einer Wasserleitung wird Wasser Stück für Stück an einem Ende der Wasserleitung zugeführt , und in der Wasserleitung Was Sie am anderen Ende sehen, ist ein kontinuierlicher Wasserstrahl. Das Datenschreibprogramm kann Daten segmentweise in die Datenflusspipeline schreiben. Diese Datensegmente bilden nacheinander einen langen Datenstrom. Bei Datenleseprogrammen ist die Segmentierung des Datenstroms nicht jedes Mal erkennbar, sondern es können nur die vorherigen Daten und dann die nachfolgenden Daten gelesen werden. Unabhängig davon, ob die Daten in mehreren Stapeln oder als Ganzes auf einmal geschrieben werden, ist der Effekt beim Lesen genau der gleiche.

„Ein Stream ist der Quell- oder Endpunkt von Daten, die auf einer Festplatte oder

anderen Peripheriegeräten gespeichert sind.

Es gibt drei Möglichkeiten, Daten auf einem Computer zu speichern: einer ist externer Speicher, einer ist Speicher und der andere ist

Cache. Beispielsweise handelt es sich bei der Festplatte, der Magnetplatte, dem USB-Stick usw. auf dem Computer um externe Speicher. Auf dem Computer befindet sich ein Speicherstick, und der Cache befindet sich in der CPU. Der externe Speicher verfügt über die größte Speicherkapazität, gefolgt vom Speicher und schließlich dem Cache. Das Lesen von Daten aus dem externen Speicher ist jedoch am langsamsten, gefolgt vom Speicher und dem Cache. Hier finden Sie eine Zusammenfassung des Lesens von Daten vom externen Speicher in den Speicher und des Schreibens von Daten vom Speicher in den externen Speicher. Um Speicher und externen Speicher zu verstehen, können wir ihn einfach als Container verstehen, dh externer Speicher ist ein Container und Speicher ist ein anderer Container. Wie liest man also die Daten im externen Speichercontainer in den Speichercontainer und wie speichert man die Daten im Speichercontainer im externen Speicher?

In der Java

-Klassenbibliothek ist der Inhalt des IO-Teils sehr umfangreich, da er ein breites Feldspektrum abdeckt:

Standardeingabe und Ausgabe, Dateioperationen, Datenfluss im Netzwerk,

String-Fluss, Objektfluss, zipDateifluss usw., Die Eingabe- und Ausgabeabstraktion in Java wird als a bezeichnet Stream, genau wie eine Wasserleitung, die zwei Behälter verbindet. Das Lesen von Daten aus dem externen Speicher in den Speicher wird als Eingabestream bezeichnet, und das Schreiben von Daten aus dem Speicher in den externen Speicher wird als Ausgabestream bezeichnet.

Stream ist ein sehr anschauliches Konzept. Wenn das Programm Daten lesen muss, öffnet es einen Stream zur Datenquelle. Diese Datenquelle kann eine Datei, ein Speicher oder eine Netzwerkverbindung sein. Wenn das Programm Daten schreiben muss, öffnet es in ähnlicher Weise einen Stream zum Ziel.


Die Grundkonzepte sind wie folgt zusammengefasst:

1) Datenfluss :

Eine geordnete Menge von Datenfolge von Start- und Endbytes. Einschließlich Eingabestream und Ausgabestream.

2) Eingabestrom (Eingabestrom):

Das Programm liest die Datenquelle aus dem Eingabestrom. Zu den Datenquellen gehört die Außenwelt (Tastatur, Dateien, Netzwerk...), die den Kommunikationskanal darstellt, der die Datenquelle in das Programm einliest

3) Ausgabestream :

Das Programm schreibt Daten in den Ausgabestream. Ein Kommunikationskanal, der Daten im Programm nach außen ausgibt (Monitor, Drucker, Datei, Netzwerk...).

Der Zweck der Verwendung des Datenflusses besteht darin, die Ausgabe und Eingabe unabhängig vom Gerät zu machen.

Input Stream ist es egal, von welchem ​​Gerät die Datenquelle stammt (Tastatur, Datei, Netzwerk)
Output Stream ist es egal, für welches Gerät die Daten bestimmt sind (Tastatur, Datei, Netzwerk)

4 Klassifizierung des Datenstroms:

Die Daten in der Stream-Sequenz können entweder unverarbeitete ursprüngliche Binärdaten oder spezifische Daten sein, die nach einer bestimmten Codierung einem bestimmten Format entsprechen. Daher gibt es in Java zwei Arten von Streams:
1) Byte-Stream: Die kleinste Dateneinheit im Datenstream sind Bytes
2) Zeichenstream: Daten Die kleinste Dateneinheit im Stream ist ein Zeichen. Zeichen in Java sind Unicode-codiert und ein Zeichen belegt zwei Bytes.



3. Standard-E/A

Java-Programme können über Befehlszeilenparameter kurzzeitig Informationen mit der Außenwelt austauschen. Gleichzeitig sorgt es auch für den Informationsaustausch mit Standard-Ein- und Ausgabegeräten, wie z B. Tastaturen und Monitore. Über Dateien können Informationen in jeglicher Datenform mit der Außenwelt ausgetauscht werden.

1. Befehlszeilenparameter


  1. öffentliche Klasse TestArgs { 

  2. public static void main(String[ ] args) {

  3.  for (int i = 0; i < args.length; i++) {

  4. System.out.println("args[" + i + "] ist <" + args[i] + ">"); 🎜>

  5. Befehl ausführen: Java Java C VB

    Ergebnis ausführen:
args[0] ist


args[1] ist

args[ 2] ist

2. Standard-Eingabe- und Ausgabedatenstrom

Der Standarddatenstrom, der mit dem Java-System geliefert wird: java.

lang

.System:

java.lang.System 

öffentlich

endgültig
  1. Klassensystem

    erweitert
  2. Objekt

    { static PrintStream err;//Standardfehlerstrom (Ausgabe)

  3. static InputStream in;

    //Standardeingabe (Tastatureingabestream)

  4. statischer PrintStream out;

    //Standardausgabestream ( Ausgabestrom überwachen)

  5. }
  6. Hinweis:
    (1) Die Systemklasse kann keine Objekte erstellen und kann nur ihre drei statischen Mitglieder direkt verwenden.
    (2) Immer wenn die Hauptmethode ausgeführt wird, werden die oben genannten drei Objekte automatisch generiert.

    1) Standardausgabestream System.out

    System.out gibt Daten an das Standardausgabegerät aus, dessen Datentyp ist für PrintStream. Methode:

    Void print(parameter)

    Void println(parameter)

    2) Standard-Eingabestream System.in

    System.in liest Standardeingabegerätedaten (erhält Daten von der Standardeingabe, normalerweise der Tastatur), und sein Datentyp ist InputStream. Methode:

    int read() //Den ASCII-Code zurückgeben. Wenn der Rückgabewert = -1 ist, bedeutet dies, dass keine Bytes gelesen wurden und die Lesearbeit beendet ist.

    int read(byte[] b)//Mehrere Bytes in Puffer b einlesen. Der Rückgabewert ist die Anzahl der gelesenen Bytes.



    1. java.io importieren.*;

    2. public

      class StandardInputOutput {

    3. public

      static void main(String args[]) {

    4. int b;

    5. versuchen Sie es mit {
    6. System.out.println(
    7. "Please Input:");
    8. ((b = System.in.read()) != -
    9. 1) {
    10. System.out.print((char ) b); 

    11.                                                🎜>

    12. Warten auf Tastatureingabe, unabhängig von der Tastatureingabe wird ausgedruckt:

    13. 3) Standardfehlerstrom

    14. System.err gibt Standard aus Fehler

      , sein Datentyp ist PrintStream. Ausführliche Anweisungen finden Sie in der
    15. API
    16. .

    Die Standardausgabe ruft die println-Methode über System.out auf, um Parameter auszugeben und die Parameter zu umbrechen, während die print-Methode die Parameter ausgibt, aber die Zeile nicht umbricht. Die println- oder print-Methode implementiert mehrere Methoden zur Ausgabe grundlegender Datentypen durch

    Überladung
    , einschließlich der Ausgabeparametertypen boolean, char, int, long,

    float

    und double. Gleichzeitig werden auch Methoden überladen, deren Ausgabeparametertypen char[], String und Object sind. Unter diesen rufen die Methoden print(Object) und println(Object) zur Laufzeit die toString-Methode des Parameterobjekts auf.

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStreamReader 🎜>


    public

    class StandardInputOutput { 🎜>static
      void main(String args[]) {
    1. String s;

    2. InputStreamReader ir =

    3. new
    4. InputStreamReader(System.in);

      BufferedReader in =

      new B ufferedReader( ir);
    5. System.out.println(

      "Unix-System: Strg-D oder Strg-C
    6. Beenden
    7. "

                                                                                                  🎜>

    8. s = in .

      readLine();

    9.                                                                                   >

       while (s !=

      null
    10. ) {
    11.        System.out.println(
    12. "Read: " + s);

    13. s = in .readLine();
    14. } 🎜 >

    15. in.close();
    16. catch ( IOException e) {

      // Fangen Sie alle IO-Ausnahmen ab                                   

    17. 4.java.IO Hierarchische Architektur
    18. Die wichtigsten Dinge im gesamten Java.io-Paket sind 5 Klassen und eine

      Schnittstelle

      . Die fünf Klassen beziehen sich auf File, OutputStream, InputStream, Writer und Reader; eine Schnittstelle bezieht sich auf Serializable. Sobald Sie diese Kern-IO-Operationen beherrschen, verfügen Sie über ein vorläufiges Verständnis des IO-Systems in Java
    19. Java I/O umfasst hauptsächlich die folgenden Ebenen, darunter drei Teile:
    20. 1. Streaming-Teil

      – IO Der Hauptteil; 🎜>
    21. 2. Der Nicht-Streaming-Teil
    22. – umfasst hauptsächlich einige Klassen, die den Streaming-Teil unterstützen, wie zum Beispiel: File-Klasse, RandomAccessFile-Klasse und FileDescriptor-Klasse; Klassen

      – Klassen im Zusammenhang mit

      Sicherheit
    23. im Dateileseteil, wie zum Beispiel: SerializablePermission-Klasse und
    24. DateisystemKlassen, wie zum Beispiel: FileSystem-Klasse und Win32FileSystem-Klasse und WinNTFileSystem-Klasse.

      Die Hauptkategorien sind wie folgt: 1. Datei (Dateieigenschaften und -verwaltung): Wird für Beschreibungsinformationen von Dateien oder Verzeichnissen verwendet, z. B. zum Erstellen neuer Verzeichnisse, zum Ändern von Dateinamen, löschen

      Datei, ermitteln Sie den Pfad der Datei usw.
    25. 2. InputStream (Binärformatoperation): Abstrakte Klasse, bytebasierte Eingabeoperation, ist die übergeordnete Klasse aller Eingabestreams. Definiert gemeinsame Merkmale, die alle Eingabestreams haben.

      3. OutputStream (Binärformatoperation): abstrakte Klasse. Bytebasierte Ausgabeoperationen. Ist die übergeordnete Klasse aller Ausgabestreams. Definiert gemeinsame Merkmale, die alle Ausgabestreams haben.

      Zeichen in Java übernehmen den Unicode-Standard. Ein Zeichen besteht aus 16 Bits, das heißt, ein Zeichen wird durch zwei Bytes dargestellt. Zu diesem Zweck wurden in JAVA Streams zur Verarbeitung von Zeichen eingeführt.

      4. Reader (Dateiformatoperation): abstrakte Klasse, zeichenbasierte Eingabeoperation.

      5. Writer (Dateiformatoperation): abstrakte Klasse, zeichenbasierte Ausgabeoperation.

      6. RandomAccessFile (zufällige Dateioperation): Es verfügt über umfangreiche Funktionen, kann Zugriffsoperationen (Eingabe und Ausgabe) von jedem Ort in der Datei aus ausführen.

      Die Architektur des IO-Streams in Java ist wie in der Abbildung dargestellt:



      Im java.io-Paket der Java-Sprache stellt die File-Klasse Operationen und Verwaltungsmethoden zum Beschreiben von Dateien und Verzeichnissen bereit. Die File-Klasse ist jedoch keine Unterklasse von InputStream, OutputStream oder Reader oder Writer, da sie nicht für die Dateneingabe und -ausgabe verantwortlich ist, sondern speziell zur Verwaltung von Festplattendateien und Verzeichnissen verwendet wird.

      Funktion: Die File-Klasse wird hauptsächlich zum Benennen von Dateien, zum
      Abfragen

      Dateien

      Attributen

      und zum

      Verarbeiten von Dateien
      Verzeichnissen verwendet.

      öffentliche 

      Klassendatei erweitert Objekt 

      implementiert Serialisierbar, Vergleichbar

      1. {}

      2. Die Dateiklasse bietet insgesamt drei verschiedene

        Konstruktoren , um Datei- und Verzeichnisnameninformationen in verschiedenen Parameterformen flexibel zu empfangen. Konstruktor:

        1) Datei (String-Pfadname)
      3. Beispiel: Datei f1=neue Datei("FileTest1.txt"); //Dateiobjekt f1 erstellen, auf das durch f1 verwiesen wird Datei wird im aktuellen Verzeichnis erstellt FileTest1.txt

      4. 2) Datei (String parent , String child)


      Beispiel: File f2=new File(“D:\

      dir

      1","FileTest2.txt") ;// Hinweis: Das Verzeichnis D:\dir1 muss im Voraus vorhanden sein, sonst tritt eine Ausnahme auf

      3) Datei (übergeordnete Datei, untergeordnete Zeichenfolge) Beispiel: Datei f4=neue Datei("\dir3");
      Datei f5=neue Datei(f4,"FileTest5.txt"); //Wenn das Verzeichnis \dir3 nicht existiert, verwenden Sie f4.mkdir() Erstellen Sie zuerst Sobald ein Dateiobjekt erstellt wurde, das einer Festplattendatei oder einem Verzeichnis entspricht, können Sie die Attribute der Datei oder des Verzeichnisses durch Aufrufen seiner Methoden abrufen.

      1) öffentlicher boolescher Wert existiert() Bestimmen Sie, ob die Datei oder das Verzeichnis existiert
      2) Öffentlicher boolescher Wert isFile() Bestimmen Sie, ob es sich um eine Datei oder ein Verzeichnis handelt 3) Öffentlicher boolescher Wert isDirectory() Bestimmen Sie, ob es handelt sich um eine Datei oder ein Verzeichnis 4) public String getName() gibt den Dateinamen oder Verzeichnisnamen zurück

      5) public String getPath() gibt den Pfad der Datei oder des Verzeichnisses zurück.

      6) public long length( ) Ermitteln Sie die Länge der Datei 7) public String[ ] list ( ) Speichern Sie alle Dateinamen im Verzeichnis im String Array
      und geben Sie es zurück. Die File-Klasse definiert auch einige Methoden zum Verwalten und Betreiben von Dateien oder Verzeichnissen:
      1) public boolean renameTo(File newFile); Rename a file
      2) public void

      löschen

      ( ); Datei löschen

      3) public boolean mkdir( ); Verzeichnis erstellen




      Beispiel:



      1. java.io.File importieren

      2. import java.io.IOException;

      3. public class TestFile { 🎜>

      4. public
      5. static

        void main(String args[]) throws IOException {

        File dir =
      6. new File(
      7. "\root");

        File f1 =
      8. new File(dir,
      9. "fileOne.txt");

        fileTwo.java");
      10. >
      11. if (! F1.exists ())

      12. 🎜>                                                                                           System.out.println( "f1's AbsolutePath= " + f1.getAbsolutePath()

      13. System.out.println(

        " f1Canread= " + f1.canRead());
      14. System.out.println(

        "f1's len= " + f1.length()); 🎜>
      15. String[] FL;

      16. int count

        =
      17. 0;
      18. FL = dir.list();

      19. for (int i =

        0; i < FL.length; i++ ) {
      20. count++;
      21. System.out.println( FL[i] +

        "ist in \root");
      22. "there are" + count +

        "file in //root"); 🎜>}

      23. Beschreibung: Dateiklassenmethoden:

        (1) exist() Testen, ob die angegebene Datei oder das angegebene Verzeichnis auf der Festplatte vorhanden ist (2) mkdir() Erstellt das durch das Dateiobjekt angegebene Verzeichnis (einschichtiges Verzeichnis) (3) createNewFile( ) Erstellen Sie die durch das Dateiobjekt (4) angegebene Datei. list() gibt alle Dateinamenzeichenfolgen im Verzeichnis

      24. < zurück 🎜 >
      25. 6. Java.IO-Stream-Klassenbibliothek

        4 Grundklassen von io stream

        Das java.io-Paket enthält die Anforderungen für Streaming-I/O alle Klassen. Es gibt vier Grundklassen im java.io-Paket: InputStream-, OutputStream- und Reader- und Writer-Klassen, die Byteströme bzw. Zeichenströme verarbeiten:
      26. Grundlegender Datenstrom I/ O

      27. Eingabe/Ausgabe

        输入/输出

        字节流

        字符流

        输入流

        Inputstream

        Reader

        输出流

        OutputStream

        Writer

        Byte-Stream<🎜>

        Zeichenstream<🎜>

        Eingabestream<🎜>

        Eingabestream<🎜>

        Reader<🎜>

        Ausgabestream<🎜>

        OutputStream <🎜>

        Autor<🎜>


        Eine Vielzahl anderer Streams in Java werden von ihnen abgeleitet:

        In der JDK1.4-Version wurde eine neue I/O-Klassenbibliothek eingeführt, die sich in Java befindet. nio-Paket, die neue I/O-Klassenbibliothek, nutzt Kanäle und Puffer, um die Effizienz von I/O-Vorgängen zu verbessern.

        Im java.io-Paket stellt java.io.InputStream den Byte-Eingabestream und java.io.OutputStream den Byte-Ausgabestream dar, der sich auf der obersten Ebene des java.io-Pakets befindet. Beide Klassen sind abstrakte Klassen, was bedeutet, dass sie nicht instanziiert werden können und zur Erzielung bestimmter Funktionen in Unterklassen unterteilt werden müssen.

        1. Spezifische Klassifizierung von IO-Streams

        1. Gesamtklassifizierung nach I/O-Typ:

        <.> 1. Speicher 1) Lesen Sie die Daten aus/in den Speicher. Datenarray: char Array Reader, CharArrayWriter, bytearrayinPutstream, bytearrayoutstream 2) Daten lesen und schreiben StringReader, StringWriter, StringBufferInputStream

        2.Pipe-Pipeline Implementieren Sie die Ein- und Ausgabe der Pipeline (Interprozesskommunikation): PipedReader, PipedWriter, PipedInputStream, PipedOutputStream
        3.Dateidatei Streamen. Dateien lesen und schreiben: FileReader, FileWriter, FileInputStream, FileOutputStream
        4. ObjectSerialization-Objekteingabe und -ausgabe: ObjectInputStream, ObjectOutputStream
        5.DataConversion-Datenstrom Drücken Sie auf Basisdatentyp Lesen und Schreiben (die verarbeiteten Daten sind Javas Grundtypen (z. B. Boolean, Byte, Ganzzahl und Gleitkommazahl)): DataInputStream, DataOutputStream
        6. Drucken Enthält praktisches Drucken Methoden: PrintWriter, PrintStream
        7.Pufferpufferung Daten beim Lesen oder Schreiben zwischenspeichern, um die Anzahl der E/A zu reduzieren: BufferedReader, BufferedWriter, BufferedInputStream, BufferedOutputStream
        8.Filterung Filtern, Filtern, wenn Daten gelesen oder geschrieben werden: FilterReader, FilterWriter, FilterInputStream, FilterOutputStream bis
        9.Concatenation Input Mehrere Eingabeströme zu einem Eingabestrom verbinden: SequenceInputStream
        10. Zählen Zählen Zeilen beim Lesen von Daten zählen: LineNumberReader, LineNumberInputStream
        11. Vorlesen durch den Caching-Mechanismus: PushbackReader, PushbackInputStream 12.Konvertieren zwischen Bytes und Zeichen
        Konvertieren Sie den Byte-Stream gemäß bestimmten Codierungs-/Decodierungsstandards in einen Zeichenstream oder führen Sie eine umgekehrte Konvertierung durch (Stream to Reader, Writer-Konvertierungsklasse): InputStreamReader, OutputStreamWriter

        2. Klassifizierung nach Datenquelle (Ziel):

        1. Datei (Datei): FileInputStream, FileOutputStream, FileReader, FileWriter 2. Byte[]: ByteArrayInputStream, ByteArrayOutputStream
        3 . Char[]: CharArrayReader, CharArrayWriter
        4. Netzwerkdatenfluss:InputStream, OutputStream, Reader, Writer



        7. Byte-Stream InputStream /OutputStream


        1. InputStream

        Abstrakte Klasse

        InputStream ist ein Byte-Eingabestream. Es ist selbst eine abstrakte Klasse und muss sich auf seine Unterklassen verlassen. Diese abstrakte Klasse ist die Oberklasse aller Klassen, die Byte-Eingabestreams darstellen. Streams, die von InputStream erben, werden zur Eingabe von Daten in das Programm verwendet, und die Dateneinheit ist Bytes (8 Bit);

        InputStream ist eine Klasse zum Eingeben von Byte-Daten, daher bietet die InputStream-Klasse drei überladene Lesemethoden in der Inputstream-Klasse:
        (1) public abstract int read(): Ein Byte lesen Die Daten, die zurückgegeben werden value ist ein Wert vom Typ int, dessen hohe Bits mit 0 gefüllt sind. Wenn der Rückgabewert = -1 ist, bedeutet dies, dass keine Bytes gelesen wurden und die Lesearbeit beendet ist.
        (2) public int read(byte b[ ]): Liest b.length-Datenbytes und fügt sie in das b-Array ein. Der Rückgabewert ist die Anzahl der gelesenen Bytes. Diese Methode wird tatsächlich durch Aufrufen der nächsten Methode implementiert
        (3) public int read(byte b[ ], int off, int len): Liest bis zu len Bytes an Daten aus dem Eingabestream und speichert sie im Offset in das b-Array, dessen Verschiebungsbetrag deaktiviert ist.
         (4) public int available(): Gibt die Anzahl der Bytes zurück, die im Eingabestream gelesen werden können. Hinweis: Wenn die Eingabe blockiert ist, wird der aktuelle Thread angehalten. Wenn das InputStream-Objekt diese Methode aufruft, gibt es nur 0 zurück. Diese Methode muss von einem Unterklassenobjekt aufgerufen werden, das die InputStream-Klasse erbt (5) public long skip(long n): Ignoriert n Bytes im Eingabestream. Der Rückgabewert ist die Anzahl der tatsächlich ignorierten Bytes. Überspringen Sie einige zu lesende Bytes. (6) public int close(): Wir beenden die Verwendung Abschließend muss der von uns geöffnete Stream geschlossen werden

        Hauptunterklassen:

        1) FileInputStream verwendet eine Datei als InputStream, um den Dateilesevorgang zu implementieren

        2) ByteArrayInputStream: Verwenden Sie einen Puffer im Speicher als InputStream

        3) StringBufferInputStream: Verwenden Sie ein String-Objekt als InputStream
        4) PipedInputStream: Implementieren Sie das Pipe-Konzept, hauptsächlich in Threads. Verwenden Sie
        5) SequenceInputStream: Mehrere InputStreams zu einem InputStream zusammenführen

        2. OutputStream

        Abstrakte Klasse OutputStream bietet 3 Schreibmethoden für die Datenausgabe, die InputStream entsprechen.

        1. public void write(byte b[ ]): Schreiben Sie das Byte in Parameter b in den Ausgabestream.

        2. public void write(byte b[ ], int off, int len): Schreibe len Bytes des Parameters b, beginnend mit dem Offset off, in den Ausgabestream.
         3. public abstract void write(int b): Konvertieren Sie zunächst int in den Bytetyp und schreiben Sie das Low-Byte in den Ausgabestream.
         4. public void
        flush
        ( ): Alle Daten im Datenpuffer ausgeben und den Puffer löschen.  5. public void close(): Schließen Sie den Ausgabestream und geben Sie die mit dem Stream verbundenen Systemressourcen frei.
        Hauptunterklassen:

        1) ByteArrayOutputStream: Informationen in einem Puffer im Speicher speichern

        2) FileOutputStream: Informationen speichern In Datei speichern

        3) PipedOutputStream: implementiert das Pipe-Konzept, das hauptsächlich in Threads verwendet wird
        4) SequenceOutputStream: führt mehrere OutStreams zu einem OutStream zusammen

        Bestimmung des Endes des Streams: Methode read Wenn der Rückgabewert von () ist -1; wenn der Rückgabewert von readLine() null ist.

        3. Dateieingabestream: FileInputStream-Klasse

        FileInputStream kann die read()-Methode verwenden, um jeweils ein Byte zu lesen und als int-Typ zurückzugeben, oder es mit der read( )-Methode: Wie viele Bytes werden in ein Byte-Array gelesen, wenn Elemente im Byte-Array vorhanden sind? Beim Lesen oder Schreiben der gesamten Datei wird ein solches Byte-Array normalerweise als Puffer verwendet, da ein solches Byte-Array normalerweise eine Zwischenrolle beim Empfang von Daten spielt.

        Funktion: Datei verwenden als Der Datenfluss für die Dateneingabequelle. Mit anderen Worten handelt es sich um eine Klasse, die eine Datei öffnet und Daten aus der Datei in den Speicher liest.

        Verwendung (1)

        File fin=new File("d:/abc.txt");
        FileInputStream in=new FileInputStream( fin);

        Verwendungsmethode (2)

        FileInputStream in=new FileInputStream(“d: /abc.txt“);


        Programmbeispiel:

        Anzeige des Inhalts des Programms InputFromFile.java auf dem Monitor



        1. java.io.IOException importieren;

        2. import java.io.FileInputStream;  

        3. ;  

        4. öffentlich Klasse TestFile {  

        5.     öffentlich statisch void main(String args[]) wirft IOException {  

        6.         try{      

        7.                FileInputStream rf=new   FileInputStream("InputFromFile.java");  

        8.                int n=512;   byte buffer[]=new  byte[n];     

        9.                while((rf.read(buffer,0,n)!=-1)&&(n>0)){  

        10.                    System.out.println(new String (Puffer) );  

        11.                 }  

        12.                 System.out.println();  

        13.                 rf.close();  

        14.         } catch(IOException  IOe){        

        15.               System.out.println(IOe.toString());  

        16.         }  


        17.     }  


        18. }  


         

        4.文件输出流:FileOutputStream类

           作用:用来处理以文件作为数据输出目的数据流;或者说是从内存区读数据入文件

         

              FileOutputStream ist eine Datei, die Sie nicht benötigen File或FileDescriptor对象: 
           File   f=new  File („d:/myjava/write.txt ");
                FileOutputStream  out= new FileOutputStream (f);
          方式2: 
          FileOutputStream out=new FileOutputStream(“ d:/myjava/write.txt "); 
          方式3: Die Datei „FileDescriptor()“ wird in der Datei angezeigt. 
          FileDescriptor() fd=new FileDescriptor(); 
          FileOutputStream f2=new FileOutputStream(fd); 
          方式4:构造函数将文件名作为其第一参数, 将布尔值作为第二参数. 
          FileOutputStream f=new FileOutputStream( "d:/abc.txt",true); 
          注意: (1)文件中写数据时,若文件已经存在,则覆盖存在的文件;(2)的读/写操作结束时,应调用close方法关闭流. 

         


        程序举例:使用键盘输入一段文章,将文章保存在文件write.txt中



        1. import java.io.IOException;  

        2. import java.io.FileOutputStream;  

        3. public 

          class TestFile {  

        4.     
        5. public 

          static void main(String args[]) wirft IOException {  

        6.                                                                                                                                                                        🎜>

                                                                                                    ] =
        7. neues
        8. Byte[n];

        9. count = System.in.read(buffer); FileOutputStream wf = new FileOutputStream("d:/myjava/write.txt"); 🎜>

        10. wf.close(); wf.close(); 🎜>// Wenn der Stream-Schreibvorgang endet, rufen Sie die Close-Methode auf, um den Stream zu schließen.

        11. System.out.println(

          "In write.txt speichern");
        12. } catch (IOException IOe) {

        13. System.out.println("Dateischreibfehler!");

          }                                                                                            >
        14. 5. Anwendung von FileInputStream und FileOutputStream
        15. Verwenden Sie das Programm, um Datei file1.txt nach file2 zu kopieren .txt.

        16. java.io.File importieren;

        17. import java.io.IOException;

        18. import java.io.FileOutputStream; 🎜>import java.io.FileInputStream; >
        19. public
        20. static
        21. void main(String args[])

          throws IOException {

        try {


        File inFile =

        new File(
        "

        copy

        .java") ; >

        1. FileInputStream finS = new FileInputStream(inFile);

        2. FileOutput Stream foutS = new FileOutputStream(outFile);

        3.  int c; finS .read()) != -1) {

        4. foutS.write(c);

        5.                                                                                                 

        6. foutS.close();

        7. } catch (IOException e) { 🎜>      System.err.println("FileStreamsTest : " + e);

        8. }


        9. 6. Buffered InputStream/ BufferedOutputStream


        >

        Der Zugriff des Computers auf externe Geräte ist sehr zeitaufwändig. Je häufiger auf externen Speicher zugegriffen wird, desto größer ist die Wahrscheinlichkeit, dass die CPU im Leerlauf ist. Um die Anzahl der Zugriffe auf den externen Speicher zu reduzieren, sollten bei einem Zugriff auf das Peripheriegerät mehr Daten gelesen und geschrieben werden. Zu diesem Zweck sollte zusätzlich zu den Lese- und Schreibmechanismen, die für den Datenaustausch zwischen Programmen und Flussknoten erforderlich sind, auch ein Puffermechanismus hinzugefügt werden. Gepufferter Stream bedeutet, dass jedem Datenstrom ein Puffer zugewiesen wird. Ein Puffer ist ein Speicher, in dem Daten vorübergehend gespeichert werden. Dadurch kann die Anzahl der Festplattenzugriffe reduziert und die Übertragungseffizienz verbessert werden.

        BufferedInputStream: Beim Schreiben von Daten in den gepufferten Stream werden die Daten zunächst in den Puffer geschrieben. Wenn der Puffer voll ist, sendet das System die Daten auf einmal an das Ausgabegerät.

        BufferedOutputStream: Beim Lesen von Daten aus dem gepufferten Stream liest das System zuerst die Daten aus dem Puffer. Wenn der Puffer leer ist, liest das System die Daten dann vom Eingabegerät in den Puffer.


        1) Die Datei in den Speicher einlesen:


        BufferedInputStream mit FileInputStream verbinden

        FileInputStream in= neuer FileInputStream ( „file1.txt“ );

        BufferedInputStream bin=new BufferedInputStream( in);

        2) Speicher in Datei schreiben:

        Connect BufferedOutputStream mit FileOutputStream

        FileOutputStreamout=new FileOutputStream(“file1.txt”);


        BufferedOutputStream bin=new BufferedInputStream(out);

        3) Lesen den Tastatureingabestrom in den Speicher

        BufferedReader mit dem Standarddatenstrom verbinden

        InputStreamReader sin=new InputStreamReader (System.in);

        BufferedReader bin=new BufferedReader(sin);


        public class ReadWriteToFile {

        public

        static

        void main(String args[])
        throws IOException {

        1. InputStreamReader sin =
        2. new InputStreamReader(System.in);


        3. BufferedReader bin =

          new BufferedReader(sin); > FileWriter out = new FileWriter("myfile.txt");

        4. BufferedWriter bout = new Buffer edWriter( out); > String s;

        5. while ((s = bin.readLine()).length( ) >

          0) {

        6. >

                                                                                        >} 
        7. Programmbeschreibung:
          Zeichen von der Tastatur lesen und in die Datei schreiben. Methode der BufferedReader-Klasse: String readLine()
          Funktion: Eine Zeichenfolge lesen, die mit einem Wagenrücklaufzeichen endet.
          Methoden der BufferedWriter-Klasse: bout.write(String s,offset,len)
          Funktion: String s vom Offset aus dem Puffer starten und einen String mit der Länge len in a schreiben sicher bei.



          8. Zeichenstrom-Writer/-Leser

          Zeichen in Java übernehmen den Unicode-Standard. Ein Zeichen besteht aus 16 Bits, das heißt, ein Zeichen wird durch zwei Bytes dargestellt. Zu diesem Zweck wurden in JAVA Streams zur Verarbeitung von Zeichen eingeführt.

          1. Reader-Abstraktklasse

          Eine abstrakte Klasse zum Lesen von Zeichenströmen. Die einzigen Methoden, die Unterklassen implementieren müssen, sind read(char[], int, int) und close(). Die meisten Unterklassen überschreiben jedoch einige der hier definierten Methoden, um eine höhere Effizienz und/oder zusätzliche Funktionalität bereitzustellen.

          (1) Nehmen Sie den Dateinamen als Zeichenfolge: FileReader f=new FileReader(“c:/temp.txt”); (2) Der Konstruktor übernimmt das File-Objekt als sein Parameter.

          File f=new file(“c:/temp.txt”); FileReader f1=new FileReader(f); (3) Der Konstruktor verwendet das FileDescriptor-Objekt als Parameter Descriptor() fd=new FileDescriptor ()

               FileReader f2=new FileReader(fd); String s);

          2) CharArrayReader: und ByteArrayInputStream Entspricht
           
          3) StringReader:
          Entspricht StringBufferInputStream
           
          4) InputStreamReader

            Bytes aus dem Eingabestream lesen und in Zeichen umwandeln: Public inputstreamReader( inputstream is);
           
          5) FilterReader: Ermöglicht das Filtern des Zeichenstreams   protected filterReader(Reader r); 🎜> 
          6) BufferReader:
          akzeptiert das Reader-Objekt als Parameter, fügt einen Zeichenpuffer hinzu und verwendet die Methode readline(), um eine Zeile zu lesen.
          Public BufferReader(Reader r); Hauptmethode:
          (1) public int read() throws IOException; //Ein Zeichen lesen, der Rückgabewert wird gelesen Das Zeichen
           (2) public int read(char cbuf[]) löst eine IOException aus; /* Liest eine Reihe von Zeichen in das Array cbuf[], und der Rückgabewert ist das tatsächlich gelesene Zeichen Menge*/
          (3) public abstract int read(char cbuf[],int off,int len) throws IOException
          /* Liest len ​​Zeichen, beginnend mit dem Index des Arrays cbuf[] Storage, Der Rückgabewert ist die tatsächliche Anzahl der gelesenen Zeichen. Diese Methode muss von einer Unterklasse*/ 2 implementiert werden. Abstrakte Writer-Klasse

          Abstrakte Klasse zum Schreiben von Zeichenströmen. Die einzigen Methoden, die Unterklassen implementieren müssen, sind write(char[], int, int), Flush() und close(). Die meisten Unterklassen überschreiben jedoch einige der hier definierten Methoden, um eine höhere Effizienz und/oder zusätzliche Funktionalität bereitzustellen. Die Unterkategorien lauten wie folgt:

          1) FileWrite: Entspricht FileOutputStream
          Schreiben Sie Daten vom Typ Zeichentyp in die Datei und verwenden Sie dabei die Standardzeichenkodierung und Puffergröße.
           Public FileWrite(file f);
           2) chararrayWrite: Entspricht ByteArrayOutputStream und verwendet den Zeichenpuffer als Ausgabe.
            Public CharArrayWrite();
           3) PrintWrite: Generieren Sie formatierte Ausgabe
            public PrintWriter(outputstream os);
           4) filterWriter: wird zum Schreiben des Filterzeichenstroms
          verwendet protected FilterWriter(Writer w);
           5) PipedWriter: Entspricht PipedOutputStream

          6) StringWriter: Es gibt keinen entsprechenden byteorientierten Stream

          Hauptmethode:

          (1) public void write(int c) throws IOException; //Schreibe die unteren 16 Bits des ganzzahligen Werts c in den Ausgabestream
           (2) public void write(char cbuf[]) throws IOException; //Write das Zeichenarray cbuf[] in den Ausgabestream
           (3) public abstract void write(char cbuf[],int off,int len) throws IOException; //Schreibe die Zeichen im Zeichenarray cbuf[] in die Ausgabe stream Die len-Zeichen beginnend an der Position, an der der Index ausgeschaltet ist, werden in den Ausgabestream geschrieben
           (4) public void write(String str) throws IOException; //Schreibe die Zeichen im String str to der Ausgabestream
           (5) public void write(String str,int off,int len) throws IOException; //Schreibe len-Zeichen beginnend mit index off in string str in den Ausgabestream
          (6) flush( ) //Ausgabestrom leeren und alle zwischengespeicherten Bytes ausgeben.
           (7)close() Stream schließen public abstract void close() löst IOException aus

          3 OutputStream und Writer

          Die Klassen InputStream und OutputStream verarbeiten Byteströme, und die kleinste Einheit im Datenstrom sind Bytes (8 Bits).
          Reader und Writer verarbeiten Zeichenstrom , bei der Verarbeitung von Zeichenströmen geht es um die Konvertierung der Zeichenkodierung


          1. import java.io.* ;

          2. public class EncodeTest {

          3. >static void readBuff (byte [] buff) wirft IOException {

          4. ByteArrayInputStream in =
          5. neuer ByteArrayInputStream (buff);

          6. while((data=in.read())!=-
          7. 1) System.out.print(data+

            " " );

          8. System.out.println(); }

          9. public

            static
          10. void main(String args[])
          11. throws IOException {


          12. System.out.println ("Unicode-Zeichenkodierung im Speicher verwenden:"); 🎜> int lowBit =c&0xFF; 

            int highBit=(c&
          13. 0xFF00)>>
          14. 8; 

          15. System.out.println(""+lowBit+" "+highBit>

          16. String s="Gut";

          17. System.out.println("Standard-Zeichenkodierung des lokalen Betriebssystems : ");

          18. readBuff(s.getBytes());

          19. System.out.println(" Verwendung der GBK-Zeichenkodierung: ");

          20. readBuff(s.getBytes("GBK"));

          21. System.out.println("UTF-8-Zeichenkodierung:");

          22. readBuff(s.getBytes("UTF-8 ")); } 



          Reader The Die Klasse kann die Zeichen in anderen Codierungstypen im Eingabestream in Unicode-Zeichen konvertieren und ihnen dann Speicher im Speicher zuweisen.
          Die Writer-Klasse kann die Unicode-Zeichen im Speicher in Zeichen in anderen Codierungstypen konvertieren und dann schreiben sie in den Ausgabestream mitten.



          9. Unterklassen der IOException-Ausnahmeklasse

          1.public class EOFException:
          Diese Art von Ausnahme wird ausgelöst, wenn das Ende der Datei oder das Ende des Eingabestreams abnormal erreicht wird.
          2.public class FileNotFoundException:
          Ausnahme wird ausgelöst, wenn die Datei nicht gefunden werden kann.
          3.public class InterruptedIOException:

          Diese Art von Ausnahme wird ausgelöst, wenn der E/A-Vorgang unterbrochen wird.

    Das obige ist der detaillierte Inhalt vonJava-Eingabestream-Ausgabestream. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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