Heim  >  Artikel  >  Java  >  Ausführliche Erläuterung der IO-Grundlagen im Java-Tutorial für Fortgeschrittene

Ausführliche Erläuterung der IO-Grundlagen im Java-Tutorial für Fortgeschrittene

怪我咯
怪我咯Original
2017-07-02 10:30:151503Durchsuche

In diesem Artikel werden hauptsächlich die IO-Grundlagen des erweiterten Java-Tutorials vorgestellt. Dies ist nur eine grundlegende Einführung in Java IO, einschließlich Lese- und Schreibvorgängen.

Der Computer ist das Wichtigste Die Funktion besteht darin, Daten zu verarbeiten. Eine nützliche Computersprache muss über gute E/A-Fähigkeiten verfügen, damit unverarbeitete Daten in das Programm fließen und verarbeitete Daten herausfließen.

Im Vergleich zu anderen Sprachen sind die IO-Funktionen von Java komplex. In anderen Sprachen sind viele E/A-Funktionen (z. B. Dateien lesen) gekapselt und können mit einer oder zwei Programmzeilen implementiert werden. In Java benötigen Programmierer oft mehrere Dekorationsebenen, um das Lesen von Dateien zu erreichen.

Der Vorteil der relativen Komplexität ist die Flexibilität von IO. In Java können Programmierer den gesamten IO-Prozess steuern, um die beste IO-Methode zu entwerfen. Wir werden weiter unten mehr sehen.

IO-Beispiel

Das Folgende ist die Datei file.txt, die ich zur Demonstration verwendet habe

Hello World!
Hello Nerd!

Sehen wir uns zunächst ein Beispiel für das Lesen von Dateien an:

import java.io.*;

public class Test
{
  public static void main(String[] args)
  {
    try {
      BufferedReader br =
       new BufferedReader(new FileReader("file.txt")); 

      String line = br.readLine();

      while (line != null) {
        System.out.println(line);
        line = br.readLine();
      }
      br.close();
    }
    catch(IOException e) {
      System.out.println("IO Problem");
    }
  }
}

Dieses Programm enthält einen try...catch...finally Ausnahmehandler. Weitere Informationen finden Sie im Java Advanced Tutorial zur Ausnahmebehandlung

Dekorator- und Funktionskombination

Der Schlüssel zum Programmieren von IO liegt in der Erstellung eines BufferedReader-Objekts br:

  BufferedReader br = new BufferedReader(new FileReader("file.txt"));

Während des Erstellungsprozesses haben wir zunächst ein FileReader-Objekt erstellt. Die Funktion dieses Objekts besteht darin, den Bytestream aus der Datei „file.txt“ zu lesen und in einen Textstream umzuwandeln. In Java ist die Standardtextcodierung Unicode. BufferedReader() empfängt das FileReader-Objekt, erweitert die Funktionen von FileReader und erstellt ein neues BufferedReader-Objekt. Zusätzlich zu den oben genannten Funktionen zum Lesen und Konvertieren von Dateien bietet dieses Objekt auch zwischengespeicherte (gepufferte) Lesefunktionen. Schließlich können wir die Datei Zeile für Zeile lesen, indem wir die Methode readLine() für das br-Objekt aufrufen.

(Beim Cache-Lesen wird ein Bereich im Speicher als Cache geöffnet, in dem der von FileReader gelesene Textstrom gespeichert wird. Wenn der Cache-Inhalt gelesen wird (z. B. der Befehl readLine()), wird der Cache geöffnet )

BufferedReader() ist ein Dekorator, der ein primitives Objekt empfängt und ein dekoriertes Objekt mit komplexeren Funktionen zurückgibt. Der Vorteil von Dekorateuren besteht darin, dass mit ihnen unterschiedliche Objekte dekoriert werden können. Was wir hier ändern, ist der aus der Datei gelesene Textstrom. Andere Textströme wie Standardeingaben, Netzwerkübertragungsströme usw. können durch BufferedReader() geändert werden, um zwischengespeichertes Lesen zu erreichen.

Die folgende Abbildung zeigt, wie br funktioniert, wobei die Daten von unten nach oben fließen:

Der obige Dekorationsprozess und Textfluss in Linux die Ideen sind sehr ähnlich. Unter Linux verwenden wir einen funktionsähnlichen Ansatz zur Verarbeitung und Weitergabe von Textströmen. In Java verwenden wir Dekoratoren. Ihre Ziele sind jedoch ähnlich, nämlich die Erreichung einer Modularisierung und einer freien Kombination von Funktionen.

Mehr Kombinationen

Tatsächlich bietet Java eine Fülle von Dekoratoren. FileReader kombiniert die beiden Schritte Lesen und Konvertieren und übernimmt häufig verwendete Standardeinstellungen, wie z. B. Unicode für die Kodierung. Wir können die Kombination von FileInputStream + InputStreamReader verwenden, um FileReader zu ersetzen und so die beiden Schritte des Lesens von Bytes und des Konvertierens zu trennen und eine bessere Kontrolle über die beiden Prozesse zu haben.

(Natürlich ist FileReader bequemer zu verwenden. InputStreamReader konvertiert FileInputStream in einen Reader zur Verarbeitung von Unicode-Text)

Pfeildarstellung Datenfluss Richtung

Stream-Lesen und -Schreiben stammen aus vier Basisklassen: InputStream, OutputStream, Reader und Writer. InputStream und Reader verarbeiten Lesevorgänge und OutputStream und Writer verarbeiten Schreibvorgänge. Sie befinden sich beide im Paket java.io. Die Vererbungsbeziehung ist wie folgt:

java.io

Darüber hinaus verfügt IOException über die folgenden abgeleiteten Klassen:

IOException

Reader, Writer und ihre abgeleiteten Klassen verarbeiten Unicode-Text. Wie wir Buffered Reader, InputStreamReader oder FileReader sehen.

InputStream und OutputStream und ihre abgeleiteten Klassen verarbeiten Byteströme. Die Daten im Computer können in Byteform betrachtet werden, sodass InputStream und OutputStream zur Verarbeitung eines größeren Datenbereichs verwendet werden können. Beispielsweise können wir die folgende Kombination verwenden, um die in der komprimierten Datei enthaltenen Daten (z. B. Ganzzahlen) zu lesen:

箭头表示数据流动方向

 我们从压缩文件中读出字节流,然后解压缩,最终读出数据。

 写入

写入(write)操作与读取操作相似。我们可以通过使用装饰,实现复杂的写入功能。这里是一个简单的写入文本的例子:

import java.io.*;

public class Test
{
  public static void main(String[] args)
  {
    try {
      String content = "Thank you for your fish.";

      File file = new File("new.txt");

      // create the file if doesn't exists
      if (!file.exists()) {
        file.createNewFile();
      }

      FileWriter fw = new FileWriter(file.getAbsoluteFile());
      BufferedWriter bw = new BufferedWriter(fw);
      bw.write(content);
      bw.close();

    }
    catch(IOException e) {
      System.out.println("IO Problem");
    }
  }
}

上面创建了file对象,用于处理文件路径。

总结

这里只是对Java IO的基本介绍。Java的IO相对比较复杂。Java程序员需要花一些时间来熟悉java.io中的类及其功能。

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der IO-Grundlagen im Java-Tutorial für Fortgeschrittene. 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