BufferedInputStream
BufferedInputStream ist ein gepufferter Eingangsstrom. Es erbt von filterInputStream.
Der Zweck von BufferedInputStream besteht darin, einige Funktionen zu einem anderen Eingangsstrom hinzuzufügen, z.
BufferedInputStream wird im Wesentlichen über ein internes Pufferarray implementiert. Wenn Sie beispielsweise einen BufferedInputStream erstellt haben, der einem bestimmten Eingabestream entspricht, füllt der BufferedInputStream, wenn wir die Daten des Eingabestreams über Read () lesen, die Daten des Eingabestreams in den Puffer in Stapeln aus. Immer wenn die Daten im Puffer gelesen werden, füllt der Eingabestream den Datenpuffer erneut aus. Dies wird wiederholt, bis wir das Lesen des Datenorts für Eingabestreams fertiggestellt haben.
BufferedInputStream -Funktionsliste:
BufferedInputStream(InputStream in)BufferedInputStream(InputStream in, int size)synchronized int available()void close()synchronized void mark(int readlimit)boolean markSupported()synchronized int read()synchronized int read(byte[] buffer, int offset, int byteCount)synchronized void reset()synchronized long skip(long ByteCount)
Beispielcode:
Für eine detaillierte Verwendung von API in BufferedInputStream finden Sie den Beispielcode (BufferedInputStreamtest.java):
importieren java.io.buffenedInputStream; import Java.io.BytearrayInputStream; Import Java.io.file; import Java.io.inputstream; Java.io.fileInputStream; importieren java.io.ioxception; import Java.io.io.IO.FilenotfoundfoundfoundfoundFoundfoundfoundfoundfoundfoundfoundfoundfoundfoundfoundfoundfoundfoundfoundfoundfoundfoundfoundfound; BufferedInputStream -Testprogramm * * @Author Skywang */Public Class BuferedInputStreamtest {private statische endgültige int len = 5; public static void main (String [] args) {testBuffenedInputStream (); } / *** API -Testfunktion von BufferedInputStream* / privat static void testBuffeRedInputStream () {// Erstellen Sie einen BuferedInputStream -Stream, der Inhalt ist ein Arrayletter -Array -Array -Array -Datei {file file = new File ("bufferedInputstream.txt"); InputStream in = new BufferedInputStream (neuer FileInputStream (Datei), 512); // 5 Bytes aus dem Byte -Stream lesen. "Abcde", A entspricht 0x61, B entspricht 0x62 usw. für ... für (int i = 0; i <len; i ++) {// Wenn Sie das nächste Byte weiter lesen können, lesen Sie das nächste Byte, wenn (in. System.out.printf ("%d: 0x%S/N", I, Integer.tohexString (TMP)); }} // Wenn "dieses Byte -Stream" die Markierungsfunktion nicht unterstützt, beenden Sie direkt, wenn (! In.marksSupported ()) {System.out.println ("Nicht unterstützt!"); zurückkehren ; } // markieren "aktuelle Indexposition", dh das Element der 6. Position - "f" // 1024 entspricht Marklimit in.mark (1024); // 22 Bytes überspringen. in.skip (22); // 5 Bytes Byte [] buf = new Byte [len] lesen; in.read (buf, 0, len); // BUF in eine Zeichenfolge konvertieren. String str1 = neuer String (BUF); System.out.printf ("str1 =%s/n", str1); // Setzen Sie den "Index des Eingangsstroms" auf die von Mark () gekennzeichnete Position zurück, dh auf "f" zurückgesetzt. in.reset (); // 5 Bytes aus "Byte Stream zurücksetzen" in BUF lesen. Das heißt, lesen Sie "fghij" in.read (buf, 0, len); // BUF in eine Zeichenfolge konvertieren. String str2 = neuer String (BUF); System.out.printf ("Str2 =%s/n", str2); in.close (); } catch (FilenotFoundException e) {e.printstacktrace (); } catch (SecurityException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }}} Der Inhalt von BufferedInputStream.txt im Programm ist wie folgt:
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
Auslaufergebnisse:
0: 0x611: 0x622: 0x633: 0x644: 0x65str1 = 01234str2 = fghij
BufferedOutputStream
BufferedOutputStream ist ein gepufferter Ausgangsstrom. Es erbt von filteroutputStream.
Die Funktion von BufferedOutputStream besteht darin, einem anderen Ausgangsstrom "Pufferung" bereitzustellen.
BufferedOutputStream -Funktionsliste:
BufferedOutputStream (Ausgangsstream) bufferedOutputStream (Ausgangsstream, intgröße) Synchronisierte void close () Synchronisierte void Flush () Synchronisierte Leere Schreibweise (Byte [] Puffer, Int -Offset, int Länge) Synchronisierte Void -Schreibweise (int intytyte)
Beispielcode:
Für eine detaillierte Verwendung von API in BufferedOutputStream finden Sie den Beispielcode (bufferedOutputStreamtest.java):
importieren java.io.buffenedoutputStream; import Java.io.file; import Java.io.outputStream; Import Java.io.FileOutputStream; Import Java.io.ioException; importieren Sie Java.io.filenotfoundException; importputputput -probierte. * @Author Skywang */öffentliche Klasse BufferedOutputStreamTest {private statische endgültige int len = 5; // Corresponding to English letters "abcddefghijklmnopqrssttuvwxyz" private static final byte[] ArrayLetters = { 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a}; public static void main (String [] args) {TestBuffeDeredOutputStream (); } / *** API -Testfunktion von bufferedOutputStream* / privat static void testbuffeDeredOutputStream () {// Erstellen Sie den BufferedOutputStream, der "Dateiausgabestrom" entspricht. Seine entsprechende Puffergröße ist 16, dh wenn der Pufferdaten> = 16, wird der Inhalt des Puffer automatisch in den Ausgabestress geschrieben. try {Datei file = new File ("out.txt"); OutputStream out = new bufferedOutputStream (neuer FileOutputStream (Datei), 16); // Schreiben Sie die ersten 10 Bytes des Arrayletter -Arrays in den Ausgabestream Out.write (Arrayletters, 0, 10); // Schreiben Sie die "newline/n" in den Ausgabestream out.write ('/n'); // TODO! // out.flush (); ReadUSerinput (); out.close (); } catch (FilenotFoundException e) {e.printstacktrace (); } catch (SecurityException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }} / *** Benutzereingabe lesen* / private statische void ReadUSerInput () {System.out.println ("Bitte einen Text eingeben:"); Scanner reader = neuer Scanner (System.in); // Warten Sie auf eine Eingabezeichenfolge str = reader.next (); System.out.printf ("Die Eingabe ist: %s/n", str); }} Auslaufergebnisse:
Generieren Sie die Datei "out.txt", und der Inhalt der Datei lautet "Abcdefghij".
Schritt-für-Schritt-Test: Befolgen Sie die folgenden drei Schritte, um das Programm zu testen, um die Puffergröße und die Rolle von Flush () anzuzeigen.
Typ 1: Originalprogramm
(1) Führen Sie das Programm aus. Wenn das Programm auf Benutzereingaben wartet, überprüfen Sie den Textinhalt von "out.txt". Finden Sie: Der Inhalt ist leer.
(2) Führen Sie das Programm aus. Überprüfen Sie nach der Benutzereingabe den Textinhalt von "out.txt". Finden Sie: Der Inhalt ist "Abcdefghij".
Daraus stellen wir fest, dass die Ergebnisse von (01) und (02) unterschiedlich sind; Der Grund, warum der Inhalt out.txt in (01) leer ist, liegt darin, dass die Puffergröße, die Out.txt entspricht.
Der Inhalt, der Out.txt entspricht, lautet "ABCDEFGHIJ", weil out.close () ausgeführt wird, was den Ausgabestream schließt. Vor dem Schließen des Ausgabestreams werden die Pufferdaten in den Ausgabestream geschrieben.
HINWEIS: Beim Wiederholung zuerst löschen Sie.txt.
Typ 2: Fügen Sie die folgende Anweisung vor ReadUserInput () hinzu ()
out.flush ();
Der Zweck dieses Satzes ist es, den "Pufferinhalt" in den Ausgabestream zu schreiben.
(1) Führen Sie das Programm aus. Wenn das Programm auf Benutzereingaben wartet, überprüfen Sie den Textinhalt von "out.txt". Finden Sie: Der Inhalt ist "Abcdefghij".
(2) Führen Sie das Programm aus. Überprüfen Sie nach der Benutzereingabe den Textinhalt von "out.txt". Finden Sie: Der Inhalt ist "Abcdefghij".
Aus diesem Grund stellten wir fest, dass das gleiche Ergebnis wie (01) und (02), der entsprechende Inhalt von out.txt, "abcdefghij" ist. Dies liegt daran, dass die Flush () -Operation durchgeführt wird, mit der die Pufferdaten in den Ausgabestream geschrieben werden.
HINWEIS: Beim Wiederholung von Testing.txt zuerst löschen!
Typ 3: Basierend auf dem ersten Typ,
out.write (Arrayletters, 0, 10);
Modifiziert zu
out.write (Arrayletters, 0, 20);
(1) Führen Sie das Programm aus. Wenn das Programm auf Benutzereingaben wartet, überprüfen Sie den Textinhalt von "out.txt". Finden Sie fest, dass der Inhalt "abcdefghijklMnopqrst" ist (ohne Eingabetaste).
(02) Führen Sie das Programm aus. Überprüfen Sie nach der Benutzereingabe den Textinhalt von "out.txt". Finden Sie fest, dass der Inhalt "abcdefghijklMnopqrst" (einschließlich Eingabetaste) ist.
Aus diesem Grund stellten wir fest, dass (01) das Ergebnis des Laufs "abcdefghijklmnopqrst" (ohne Wagenrendite) lautet. Dies liegt daran, dass die Größe des Puffers 16 beträgt und wir 20 Bytes bis Out.Write (Arrayletter, 0, 20) schreiben, die die Größe des Puffers überschreiten; Zu diesem Zeitpunkt werden alle Eingänge direkt in den Ausgangsstrom geschrieben, ohne durch den Puffer zu gehen.
(3) Das Ergebnis des Vorgangs ist "AbcdefghijklMnopqrst" (einschließlich Wagenrückgabe), da bei der Ausführung des Ausgangsstreams das Wagenrücklaufsymbol '/n in den Ausgabestream geschrieben ist.
HINWEIS: Beim Wiederholung von Testing.txt zuerst löschen!