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 oderanderen 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 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.
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)
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.
öffentliche Klasse TestArgs {
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "] ist <" + args[i] + ">"); 🎜> }
args[1] ist
args[ 2] ist
2. Standard-Eingabe- und Ausgabedatenstrom
Der Standarddatenstrom, der mit dem Java-System geliefert wird: java.
lang.System:
öffentlich
{ static PrintStream err;//Standardfehlerstrom (Ausgabe)
//Standardeingabe (Tastatureingabestream)
//Standardausgabestream ( Ausgabestrom überwachen)
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.
class StandardInputOutput {
static void main(String args[]) {
System.out.println(
((b = System.in.read()) != -
🎜>
}Warten auf Tastatureingabe, unabhängig von der Tastatureingabe wird ausgedruckt:
3) Standardfehlerstrom
System.err gibt Standard aus Fehler
, sein Datentyp ist PrintStream. Ausführliche Anweisungen finden Sie in der Überladung
, einschließlich der Ausgabeparametertypen boolean, char, int, long,
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
String s;
InputStreamReader ir =
System.out.println(
"Unix-System: Strg-D oder Strg-CreadLine();
while (s !=
null
} 🎜 >
4.java.IO Hierarchische Architektur
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 Java1. Streaming-Teil
– IO Der Hauptteil; 🎜>– Klassen im Zusammenhang mit
SicherheitDie 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.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
Verarbeiten von Dateien
Verzeichnissen verwendet.
Klassendatei erweitert Objekt
implementiert Serialisierbar, Vergleichbar
{}
Konstruktoren , um Datei- und Verzeichnisnameninformationen in verschiedenen Parameterformen flexibel zu empfangen. Konstruktor:
1) Datei (String-Pfadname)Beispiel: Datei f1=neue Datei("FileTest1.txt"); //Dateiobjekt f1 erstellen, auf das durch f1 verwiesen wird Datei wird im aktuellen Verzeichnis erstellt FileTest1.txt
Beispiel: File f2=new File(“D:\
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
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
( ); Datei löschen
3) public boolean mkdir( ); Verzeichnis erstellen
Beispiel:
java.io.File importieren
import java.io.IOException;
public class TestFile { 🎜>
void main(String args[]) throws IOException {
File dir =File f1 =
fileTwo.java");
if (! F1.exists ())
🎜> System.out.println( "f1's AbsolutePath= " + f1.getAbsolutePath()
System.out.println(
" f1Canread= " + f1.canRead());System.out.println(
"f1's len= " + f1.length()); 🎜>String[] FL;
int count
=FL = dir.list();
for (int i =
0; i < FL.length; i++ ) {System.out.println( FL[i] +
"ist in \root");(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
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:Eingabe/Ausgabe
| 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. 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
1. Datei (Datei): FileInputStream, FileOutputStream, FileReader, FileWriter 2. Byte[]: ByteArrayInputStream, ByteArrayOutputStream
3 . Char[]: CharArrayReader, CharArrayWriter
4. Netzwerkdatenfluss:InputStream, OutputStream, Reader, Writer
1. InputStream
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. 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
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:
import java.io.FileInputStream;
;
öffentlich Klasse TestFile {
öffentlich statisch void main(String args[]) wirft IOException {
try{
FileInputStream rf=new FileInputStream("InputFromFile.java");
int n=512; byte buffer[]=new byte[n];
while((rf.read(buffer,0,n)!=-1)&&(n>0)){
System.out.println(new String (Puffer) );
}
System.out.println();
rf.close();
} catch(IOException IOe){
System.out.println(IOe.toString());
}
}
}
作用:用来处理以文件作为数据输出目的数据流;或者说是从内存区读数据入文件
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中
class TestFile {
static void main(String args[]) wirft IOException {
🎜>
] =
count = System.in.read(buffer); FileOutputStream wf = new FileOutputStream("d:/myjava/write.txt"); 🎜>
wf.close(); wf.close(); 🎜>// Wenn der Stream-Schreibvorgang endet, rufen Sie die Close-Methode auf, um den Stream zu schließen.
System.out.println(
"In write.txt speichern");} catch (IOException IOe) {
System.out.println("Dateischreibfehler!");
} >5. Anwendung von FileInputStream und FileOutputStream
java.io.File importieren;
import java.io.IOException;
public
throws IOException {
new File(
"
.java") ; >
FileInputStream finS = new FileInputStream(inFile);
FileOutput Stream foutS = new FileOutputStream(outFile);
int c; finS .read()) != -1) {
foutS.write(c);
foutS.close();
} catch (IOException e) { 🎜> System.err.println("FileStreamsTest : " + e);
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.
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:
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 verbindenInputStreamReader sin=new InputStreamReader (System.in);
BufferedReader bin=new BufferedReader(sin);
public class ReadWriteToFile {
public
staticvoid main(String args[])
throws IOException {
new BufferedReader(sin); > FileWriter out = new FileWriter("myfile.txt");
BufferedWriter bout = new Buffer edWriter( out); > String s;
0) {
>
>}Programmbeschreibung: 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. 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. 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 () 2) CharArrayReader: und ByteArrayInputStream Entspricht 1) FileWrite: Entspricht FileOutputStream 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 Die Klassen InputStream und OutputStream verarbeiten Byteströme, und die kleinste Einheit im Datenstrom sind Bytes (8 Bits). import java.io.* ; public class EncodeTest { >static void readBuff (byte [] buff) wirft IOException {
" " ); System.out.println(); } public System.out.println ("Unicode-Zeichenkodierung im Speicher verwenden:"); 🎜> int lowBit =c&0xFF;
System.out.println(""+lowBit+" "+highBit> String s="Gut"; System.out.println("Standard-Zeichenkodierung des lokalen Betriebssystems : "); readBuff(s.getBytes()); System.out.println(" Verwendung der GBK-Zeichenkodierung: "); readBuff(s.getBytes("GBK")); System.out.println("UTF-8-Zeichenkodierung:"); readBuff(s.getBytes("UTF-8 ")); } } 9. Unterklassen der IOException-Ausnahmeklasse 1.public class EOFException: Diese Art von Ausnahme wird ausgelöst, wenn der E/A-Vorgang unterbrochen wird.
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. 1. Reader-Abstraktklasse
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:
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
(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 aus3 OutputStream und Writer
Reader und Writer verarbeiten Zeichenstrom , bei der Verarbeitung von Zeichenströmen geht es um die Konvertierung der Zeichenkodierung
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.
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:
Das obige ist der detaillierte Inhalt vonJava-Eingabestream-Ausgabestream. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!