Von dem, was ich in Stack Overflow lesen kann, nimmt der FileReader nur Dateien, wo der FileInputStream alles lesen kann. Aber hat der FileReader Vorteile? Ist es schneller?
Ich habe das gelesen:
"In FileReader können Sie keine Kodierung angeben und stattdessen verwenden Die Standard-Kodierung von plaform, die es ziemlich nutzlos macht die Verwendung führt zu beschädigten Daten, wenn der Code auf Systemen ausgeführt wird mit verschiedenen Plattform-Standard-Kodierungen. "
Aber hat es nicht ganz verstanden. Was bedeuten Plattform-Standardcodierungen?
Der Hauptunterschied ist:
Stream - Byte-basiert (Lesen oder Schreiben von Bytes)
Reader - Zeichenbasiert (Lesen oder Schreiben von Zeichen)
Ein InputStream
ist ein Stream, aus dem Sie Bytes lesen können. Normalerweise würden Sie diese Klasse nicht direkt verwenden, aber wenn Sie dies tun würden, würden Sie Binärdaten erwarten. Es hat viele verschiedene Unterklassen für die Eingabe von verschiedenen Quellen, zB FileInputStream
, AudioInputStream
, StringBufferInputStream
und so weiter.
Ein InputStreamReader
ist ein Wrapper für ein InputStream
, der die Bytes des Streams in Zeichen umwandelt und dabei jede beliebige Kodierung verwendet. Normalerweise geben Sie beim Erstellen von InputStreamReader
die Zeichencodierung an. Es gibt ein paar verschiedene Konstruktoren, mit denen Sie dies tun können. Wenn Sie Textdaten lesen möchten, können Sie ein InputStreamReader
verwenden. Setzen Sie Ihre InputStream
zuerst, um die Daten zu lesen, und wickeln Sie sie in ein InputStreamReader
.
A FileReader
ist eine spezielle InputStreamReader
, die nur aus Dateien lesen kann und die Standard-Plattformcodierung verwendet. Mit anderen Worten: Es wird davon ausgegangen, dass die gelesene Datei gemäß den Einstellungen Ihres Betriebssystems für die Plattformcodierung erstellt wurde. Dies ist normalerweise in Ordnung; Wenn Sie jedoch Dateien mit unterschiedlichen Kodierungen lesen, sollten Sie ein FileInputStream
erstellen und es in ein InputStreamReader
umbrechen.
Wenn Sie in Windows sind, gehen Sie zur Systemsteuerung - & gt; Systemsteuerung für Regions- und Sprachoptionen - & gt; Erweitert dort sehen Sie Standardcodierung. FileReader verwendet immer diese Kodierung.
Was FileReader von FileInputStream unterscheidet, ist, dass FileReader zum Lesen von Textdateien in Standardcodierung dient, während FileInputStream zum Lesen von Binärdateien dient.
A FileReader
ist ein Zeichenstrom, während FileInputStream
ein Bytestream ist. Im ersten Fall ist die Standardcodierung relevant (z. B. InputStreamReader
als Intermediumbrücke).
Wenn Sie eine andere Kodierung für einen Zeichenstrom wünschen (das ist Reader
), dann verwenden Sie:
FileInputStream
und FileOutputStream
werden für die Objektserialisierung / -deserialisierung verwendet.
Verwenden Sie es auch, wenn Sie mit Bytes arbeiten müssen.
In anderen Fällen benötigen Sie Zeichen, daher sollten Sie FileReader
/ FileWriter
verwenden.
Zum Beispiel: