Lassen Sie mich zunächst den Unterschied zwischen InputStreamReader und FileReader einführen. Der spezifische Inhalt ist wie folgt:
InputStreamReader und BufferedReader. Die wichtigste Klasse unter ihnen ist InputStreamReader, die die Brücke zum Umwandeln von Bytes in Zeichen ist. Sie können die Codierungsmethode im Konstruktor neu spezifizieren. Wenn nicht angegeben, wird die Standard -Codierungsmethode des zugrunde liegenden Betriebssystems wie GBK usw. übernommen, usw.
FileReader und InputStreamReader beinhalten die Codierungskonvertierung (Geben Sie die Codierungsmethode an oder verwenden Sie die Standardcodierung von Betriebssystem), und auf verschiedenen Plattformen kann ein verstümmelter Code auftreten! FileInputStream wird im Binärmodus verarbeitet und hat keinen verstümmelten Code.
FileInputStream -Byte -Streams werden Byte -Byte gelesen.
FileReader -Zeichenströme werden als Zeichen nacheinander gelesen.
BufferedReader bufreader = null; InputStreamReader isr = null; fileReader fr = null; try {for (String-Dateiname: fileName) {methode 1: isr = new InputStreamReader (new FileInputStream ("d: /test.txt"), "utf-8"); bufeader = new bufferedReader (ISR); Methode 2: fr = new FileReader ("d: /test.txt"); bufeader = new bufferedReader (fr); while (bufreader.ready ()) {// 1. Rufen Sie jede Zeile von Datenstring dataline = bufreader.readline (); }}Der Unterschied zwischen InputStream und Leser
Unter Java.io befinden sich zwei abstrakte Klassen: InputStream und Leser
InputStream ist eine Superklasse, die alle Klassen eines Byte -Eingangsstroms darstellt.
Leser ist eine abstrakte Klasse zum Lesen von Charakterströmen
InputStream bietet das Lesen von Byte -Streams und nicht von Textlesen, was der grundlegende Unterschied zwischen ihm und der Leserklasse ist.
Das heißt, das Zeichen -Array oder die Zeichenfolge wird mit dem Leser gelesen und das Byte -Array wird unter Verwendung von InputStream gelesen.
Nachdem wir den grundlegenden Unterschied zwischen den beiden Superklassen geklärt haben, schauen wir uns die Verwendung ihrer Unterklassen unten an. Hier sind nur einige der am häufigsten verwendeten Erklärungen
InputStream
| __FileInputStream
FileInputStream erhält Eingabebytes aus einer Datei im Dateisystem.
Zusammenfassung der Konstruktionsmethoden
FileInputStream (Dateidatei)
Erstellen Sie einen DateiInputStream, indem Sie eine Verbindung zur tatsächlichen Datei öffnen, die von der Dateiobjektdatei im Dateisystem angegeben wird.
FileInputStream (FALLESCRIPTOR FDOBJ)
Erstellen Sie einen DateiInputStream mit dem Dateideskriptor FDOBJ, der eine vorhandene Verbindung zu einer tatsächlichen Datei im Dateisystem darstellt.
FileInputStream (Zeichenfolge Name)
Erstellen Sie einen DateiInputStream, indem Sie eine Verbindung zur tatsächlichen Datei öffnen, die durch den PATHNAME -Namen im Dateisystem angegeben ist.
Leser
|--BufferedReader
| ___ InputStreamReader
| __Filereader
BufferedReader: Lesen Sie den Text aus einem Zeicheneingangsstrom und puffert einzelne Zeichen puffert, wodurch ein effizientes Lesen von Zeichen, Arrays und Zeilen ermöglicht wird.
Zusammenfassung der Konstruktionsmethoden
BufferedReader (Leser in)
Erstellt einen gepufferten Zeicheneingangsstrom, der den Eingangspuffer der Standardgrößen verwendet.
BufferedReader (Leser in, int SZ)
Erstellt einen gepufferten Zeicheneingangsstrom, der den angegebenen Eingangspuffer der Größenverwaltung verwendet.
BufferedReader (Java -Plattform SE 6)
Das größte Merkmal von BufferedReader ist die Puffereinstellung. Normalerweise führt jede von Leser gestellte gelesene Anfrage zu entsprechenden Leseanforderungen für den zugrunde liegenden Zeichen oder den Byte -Stream. Wenn keine Pufferung vorliegt, führt jeder Anruf zu read () oder readline () dazu, dass Bytes aus der Datei gelesen und in Zeichen konvertiert und zurückgegeben werden, was äußerst ineffizient ist.
Verwenden Sie den BufferedReader, um die Größe des Puffers anzugeben, oder die Standardgröße kann verwendet werden. In den meisten Fällen ist der Standardwert groß genug.
Daher wird empfohlen, alle Leser zu wickeln, deren Read () -Operationen mit BufferedReader teuer sein können (z. B. FileReader und InputStreamReader).
Zum Beispiel,
BufferedReader in = neuer BufferedReader (neuer Filereader ("foo.in"));Puffereingabe in die angegebene Datei.
InputStreamReader (Java -Plattform SE 6)
InputStreamReader ist die Brücke zwischen Byte -Streams und Zeichenströmen: Es liest Bytes mit dem angegebenen Zeichensatz und dekodiert sie in Zeichen. Der von ihm verwendete Zeichensatz kann mit dem Namen angegeben oder explizit angegeben werden, oder es kann den Standardzeichen der Plattform akzeptieren.
Zusammenfassung der Konstruktionsmethoden
InputStreamReader (InputStream IN) erstellt einen InputStreamReader, der den Standardzeichensatz verwendet. InputStreamReader (InputStream in, charSet CS) erstellt einen InputStreamReader, der den angegebenen Zeichensatz verwendet. InputStreamReader (InputStream IN, CharSetDeCoder Dec) erstellt einen InputStreamReader, der den angegebenen Charakter -Set -Decoder verwendet. InputStreamReader (InputStream in, String charSetName) erstellt einen InputStreamReader, der den angegebenen Zeichensatz verwendet.
Jeder Aufruf einer Read () -Methode im InputStreamReader führt dazu, dass ein oder mehrere Bytes aus dem zugrunde liegenden Eingabestream gelesen werden. Um eine effektive Konvertierung von Byte in den Charakter zu ermöglichen, können Sie im Voraus weitere Bytes aus dem zugrunde liegenden Strom lesen und die zur Erfüllung des aktuellen Lesevorgangs erforderlichen Bytes überschreiten.
Um die maximale Effizienz zu erzielen, sollten Sie den InputStreamReader in den BufferedReader einwickeln. Zum Beispiel:
BufferedReader in = neuer BufferedReader (neuer InputStreamReader (System.in));
Das größte Merkmal von InputStreamReader ist, dass es sich auf das feste Codierungsformat der Konvertierung beziehen kann, das bei anderen Klassen nicht möglich ist. Es ist aus der Konstruktionsmethode zu sehen. Dies ist sehr nützlich, wenn Sie chinesische Charaktere lesen.
Filerader
1) Einführung in die FileReader -Klasse:
Unterklassen der InputStreamReader -Klasse werden alle Methoden (Read () usw.) von der übergeordneten Klasse InputStreamReader geerbt.
2) Unterschiede aus der InputStreamReader -Klasse:
Zusammenfassung der Konstruktionsmethoden
FileReader (Dateidatei)
Erstellen Sie einen neuen Filereader, der eine Datei mit der Daten gelesen wird.
FileReader (fileedescriptor fd)
Erstellen Sie einen neuen Filerader, der einen Anmeldeskriptor bezeichnet hat, aus dem Daten gelesen werden.
FileReader (String -Dateiname)
Erstellen Sie einen neuen Filerader, der den Dateinamen namens, aus dem die Daten gelesen werden
Der Hauptunterschied zwischen dieser Klasse und ihrer übergeordneten Klasse InputStreamReader ist der Konstruktor, und der Hauptunterschied ist der Konstruktor!
Aus dem Konstruktor des InputStreamReaders sind die Parameter in Eingabestream- und Codierungsmethode. Es ist ersichtlich, dass die InputStreamReader -Klasse verwendet werden muss, wenn Sie die Codierungsmethode angeben möchten. und die Parameter des FileReader -Konstruktors entsprechen den gleichen wie FileInputStream, ein Dateiobjekt oder eine Zeichenfolge, die den Pfad darstellt. Wenn Sie eine Datei basierend auf dem Dateiobjekt oder der Zeichenfolge lesen möchten, verwenden Sie FileReader.
Ich denke, die Funktion der Filereader -Unterklasse liegt in dieser kleinen Arbeitsteilung. Der Hauptunterschied zwischen dieser Klasse und ihrer übergeordneten Klasse InputStreamReader ist der Konstruktor, und der Hauptunterschied ist der Konstruktor!
Von InputStreamReader
Im Konstruktor sind die Parameter Eingabe- und Codierungsmethode. Es ist ersichtlich, dass die InputStreamReader -Klasse verwendet werden muss, wenn Sie die Codierungsmethode angeben möchten. und die Parameter des FileReader -Konstruktors entsprechen den gleichen wie FileInputStream, ein Dateiobjekt oder eine Zeichenfolge, die den Pfad darstellt. Wenn Sie eine Datei basierend auf dem Dateiobjekt oder der Zeichenfolge lesen möchten, verwenden Sie FileReader.
Ich denke, die Funktion der Filereader -Unterklasse liegt in dieser kleinen Arbeitsteilung.
Zwei Verbindungen und Unterschiede
(1) Zeichen und Bytes:
Die FileInputStream -Klasse verwendet Binäreingang/-ausgabe, und die E/A -Geschwindigkeit ist schnell und effizient, aber die Read () -Methode liest ein Byte (Binärdaten), das für Personen sehr ungünstig ist, und sie kann nicht direkt auf Zeichen in der Datei wie Ersatz und Suche arbeiten (sie muss in Bytes betrieben werden).
Die Leserklasse macht diesen Defekt aus und kann im Textformat eingeben/ausgeben, was sehr bequem ist. Beispielsweise können Sie die while ((ch = fileReader.read ())! =-1) verwenden, um die Datei zu lesen; Sie können die BufferedReader's Readline () -Methode verwenden, um die Textzeile für Zeile zu lesen.
(2) Codierung
InputStreamReader, es ist die Brücke zum Umwandeln von Bytes in Zeichen. Sie können die Codierungsmethode im Konstruktor neu spezifizieren. Wenn nicht angegeben, wird die Standard -Codierungsmethode des zugrunde liegenden Betriebssystems wie GBK usw. übernommen, usw.
FileReader und InputStreamReader beinhalten die Codierungskonvertierung (Geben Sie die Codierungsmethode an oder verwenden Sie die Standardcodierung von Betriebssystem), und auf verschiedenen Plattformen kann ein verstümmelter Code auftreten! FileInputStream wird im Binärmodus verarbeitet und hat keinen verstümmelten Code.
Bei der Angabe der Codierungsmethode muss daher die InputStreamReader -Klasse verwendet werden, sodass es eine Brücke zum Umwandeln von Bytes in Zeichen ist.
(3) Cache -Bereich
Die BufferReader -Klasse wird verwendet, um alle Leser zu wickeln, deren Read () -Operationen teuer sein können (z. B. FileReader und InputStreamReader).
(4) standardisierte Verwendung
Fassen Sie die oben genannten zusammen und finden Sie eine bessere Standardnutzung:
1) Datei = neue Datei ("hello.txt");
FileInputStream in = new FileInputStream (Datei);
2) Datei = neue Datei ("hello.txt");
FileInputStream in = new FileInputStream (Datei); InputStreamReader Inreader = neuer InputStreamReader (in "utf-8"); BufferedReader bufeader = new bufferedReader (Inreader);
3) Datei = neue Datei ("hello.txt");
FileReader fileReader = new FileReader (Datei); BufferedReader bufeader = new bufferedReader (fileReader);