Heim  >  Artikel  >  Java  >  Die Java-Sprache geht tief in die Essenz des JAVA-IO-Flusses ein

Die Java-Sprache geht tief in die Essenz des JAVA-IO-Flusses ein

黄舟
黄舟Original
2016-12-17 11:29:151008Durchsuche

1. Eingabe und Ausgabe
1.stream stellt jede Datenquelle dar, die Daten erzeugen kann, oder jede Empfangsquelle, die Daten empfangen kann.
In Javas IO umfassen alle Streams (einschließlich Eingabe- und Ausgabestreams) zwei Typen:
1.1 Byte-orientierter Stream
Byte-orientierter Stream bedeutet wortorientierter Stream. Lesen Sie Informationen aus dem Stream oder schreiben Sie Informationen in den Stream Abschnitte. Byteorientierte Streams umfassen die folgenden Typen:
1) Eingabestream:
1) ByteArrayInputStream: Verwenden Sie einen Puffer im Speicher als InputStream
2) StringBufferInputStream: Verwenden Sie ein String-Objekt als InputStream
3) FileInputStream: Verwenden Sie eine Datei als InputStream, um den Lesevorgang der Datei zu realisieren
4) PipedInputStream: Implementieren Sie das Pipe-Konzept, das hauptsächlich in Threads verwendet wird
5) SequenceInputStream: Verwenden Sie mehrere InputStreams, die zu einem InputStream zusammengeführt werden
2) Outstream
1) ByteArrayOutputStream: Informationen in einem Puffer im Speicher speichern
2) FileOutputStream: Informationen in einer Datei speichern
3) PipedOutputStream: Implementierung Verstehen Sie das Konzept der Pipe, das hauptsächlich in Threads verwendet wird
4) SequenceOutputStream: Mehrere OutStreams zu einem OutStream zusammenführen
1.2 Unicode-zeichenorientierter Stream
Unicode-zeichenorientierter Stream bedeutet Unicode Lesen Sie Informationen aus dem Stream oder schreiben Sie Informationen in Einheiten von Zeichen in den Stream. Unicode-zeichenorientierte Streams umfassen die folgenden Typen:
1) Input Stream
1) CharArrayReader: entspricht ByteArrayInputStream
2) StringReader: entspricht StringBufferInputStream
3) FileReader: entspricht FileInputStream
4) PipedReader: Entspricht PipedInputStream
2) OutStream
1) CharArrayWrite: Entspricht ByteArrayOutputStream
2) StringWrite: Es gibt keinen entsprechenden byteorientierten Stream
3 ) FileWrite: Entspricht FileOutputStream
4) PipedWrite: Entspricht PipedOutputStream
Zeichenorientierte Streams haben grundsätzlich entsprechende byteorientierte Streams. Die von den beiden entsprechenden Klassen implementierten Funktionen sind gleich, die Anleitung während des Betriebs ist jedoch unterschiedlich. Beispielsweise verwenden CharArrayReader: und ByteArrayInputStream beide einen Puffer im Speicher als InputStream. Der Unterschied besteht darin, dass ersterer jedes Mal ein Byte an Informationen aus dem Speicher liest, während letzterer jedes Mal ein Zeichen aus dem Speicher liest.
1.3 Konvertierung zwischen zwei nicht aktuell orientierten Streams
InputStreamReader und OutputStreamReader: Konvertieren Sie einen byteorientierten Stream in einen zeichenorientierten Stream.
2. Attribute zum Stream hinzufügen
2.1 Die Rolle von „Attribute zum Stream hinzufügen“
Mit der oben vorgestellten API für den Betrieb von IO in Java können wir jeden Vorgang ausführen, den wir ausführen möchten. Aber über Unterklassen von FilterInputStream und FilterOutStream können wir dem Stream Eigenschaften hinzufügen. Im Folgenden finden Sie ein Beispiel für
, um die Funktion dieser Funktion zu veranschaulichen.
Wenn wir Daten in eine Datei schreiben möchten, können wir Folgendes tun:
FileOutStream fs = new FileOutStream("test.txt");
Dann können wir write() über das generierte fs-Objekt aufrufen Die Funktion schreibt Daten in und aus der Datei test.txt. Wenn wir jedoch die Funktion „zuerst die in die Datei zu schreibenden Daten im Speicher zwischenspeichern und dann die Daten im Cache in die Datei schreiben“ implementieren möchten, kann keine der oben genannten APIs unsere Anforderungen erfüllen. Aber durch Unterklassen von FilterInputStream und FilterOutStream können wir die Funktionen, die wir benötigen, zu FileOutStream hinzufügen.
2.2 Verschiedene Arten von FilterInputStream
2.2.1 Wird zum Kapseln von byteorientiertem InputStream verwendet
1) DataInputStream: Basistypdaten (int, char usw.) aus dem Stream lesen.
2) BufferedInputStream: Puffer verwenden
3) LineNumberInputStream: Es zeichnet die Anzahl der Zeilen im Eingabestream auf, und dann können Sie getLineNumber() und setLineNumber(int) aufrufen
4) PushbackInputStream: Wird selten verwendet , Wird im Allgemeinen für die Compiler-Entwicklung verwendet
2.2.2 Wird zum Kapseln von zeichenorientiertem InputStream verwendet
1) Es gibt keine Klasse, die DataInputStream entspricht. Sofern Sie nicht stattdessen BufferedReader verwenden, wenn Sie readLine() verwenden, verwenden Sie DataInputStream
2) BufferedReader: Entspricht BufferedInputStream
3) LineNumberReader: Entspricht LineNumberInputStream
4) PushBackReader: Entspricht PushbackInputStream
2.3 FilterOutStream Verschiedene Typen
2.2.3 wird verwendet, um byteorientierten OutputStream zu kapseln
1) DataIOutStream: Basisdaten vom Typ (int, char usw.) in den Stream ausgeben.
2) BufferedOutStream: Puffer verwenden
3) PRintStream: Formatierte Ausgabe generieren
2.2.4 Wird verwendet, um zeichenorientierten OutputStream zu kapseln
1) BufferedWrite: Entsprechend
2) PrintWrite: entspricht
3. RandomaccessFile
1) Lese- und Schreibvorgänge für Dateien können über das RandomAccessFile-Objekt abgeschlossen werden
2) Beim Generieren eines Objekts können Sie die Art der zu öffnenden Datei angeben: r, schreibgeschützt ;w, nur schreiben; rw kann gelesen und geschrieben werden
3) Sie können direkt zur angegebenen Stelle in der Datei springen
4. Ein Beispiel für eine E/A-Anwendung
import java.io.*;
public class TestIO{
public static void main(String[] args)
throws IOException{
// 1. Daten aus einer Datei in Zeileneinheiten lesen
BufferedReader in =
new BufferedReader(
new FileReader("F:\nepalon\TestIO.java"));
String s, s2 = new String();
while((s = in.readLine()) != null)
s2 += s + "n";
in.close();

/ /1b. Tastatureingaben empfangen
BufferedReader stdin =
new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Enter a line:");
System.out.println(stdin.readLine());

//2. Daten aus einem String-Objekt lesen
StringReader in2 = new StringReader(s2);
int c ;
while((c = in2.read()) != -1)
System.out.println((char)c);
in2.close();

Die Oben finden Sie den Inhalt von Java und IO Flow. Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (www.php.cn).


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