codestory

Die Anleitung zu Java BufferedInputStream

  1. BufferedInputStream
  2. mark() & reset()
  3. Examples

1. BufferedInputStream

BufferedInputStream ist eine Unterklasse von InputStream, mit der das Lesen von Text aus binären Eingabestreams vereinfacht und die Programmleistung verbessert wird.
Das Funktionsprinzip von BufferedInputStream sieht wie folgt aus:
BufferedInputStream umschließt ein Objekt InputStream, das automatisch die Daten aus dem Ursprung (z.B die Datei) liest und im buffer von BufferedInputStream speichert.
BufferedInputStream überschreibt die Methoden, die von seiner übergeordneten Klasse erben, wie read(), read(byte[]),... um sicherzustellen, dass sie die Daten aus dem buffer sondern nicht aus dem Ursprung (z.B Datei) bearbeiten.
Der oben erwähnte sogenannte "buffer" ist eigentlich nur ein Array byte. Das Objekt InputStream (vom BufferedInputStream) liest automatisch bytes vom Ursprung, die in diesem Array gespeichert werden sollen.
BufferedInputStream liest bytes aus dem Array buffer und gibt die gelesenen Position frei. Die freigegebenen Positionen werden verwendet um die neu gelesenen bytes vom Ursprung zu speichern.
BufferedInputStream constructors
BufferedInputStream​(InputStream in, int size)

BufferedInputStream​(InputStream in)
  • Der Kontructor BufferedInputStream(InputStream,int) erstellt ein Objekt BufferedInputStream mit dem Array buffer, deren Größe angegeben ist.
  • Der Contructor BufferedInputStream(InputStream) erstellt ein Objekt BufferedInputStream mit dem Array buffer, deren Größe default ist (size = 8192).

2. mark() & reset()

Ein interessanter Aspekt von BufferedInputStream ist, dass es mark() und reset() unterstüzt, zwei von InputStream geerbte Methoden. Nicht alle Unterklasse von InputStream unterstützen diese beiden Methoden. Grundsätzlich können Sie die Methode markSupported() aufrufen um zu prüfen, ob zwei obige Methode unterstützt werden oder nicht.
Sehen Sie mehr die detailierte Erläuterung über die zwei Methoden mark() und reset() im Artikel über InputStream:

3. Examples

Um ein Objekt BufferedInputStream zu erstellen, müssen Sie ein Objekt InputStream erstellen um die Daten vom Ursprung (z.B aus der Datei) zu lesen. Da InputStream ein abstrakte Klasse ist, müssen Sie sie aus einer ihrer Unterklassen erstellen.
Z.B: Erstellen Sie einen BufferedInputStream mit einem Array buffer von 16384. D.h dieser buffer hat eine Größe von 16384 bytes (16 KB).
// Create InputStream to read a file.
InputStream is = new FileInputStream("/Volumes/Data/test/test.txt");

// Create a BufferedInputStream with buffer array size of 16384 (16 KB).
BufferedReader br = new BufferedReader(is, 16384);
Erstellen Sie einen BufferedInputStream mit der Standardgröße vom Array buffer (8192), die 8192 bytes (8 KB) entspricht.
// Create Reader to read a file.
Reader reader = new FileReader("/Volumes/Data/test/test.txt");

// Create a BufferedReader with default buffer array size of 8192 (16384 bytes = 16 KB).
BufferedReader br = new BufferedReader(reader);
Z.B: Verwenden Sie BufferedInputStream um die Datei zu lesen.
test.txt
This is the Latin text
BufferedInputStreamEx1.java
package org.o7planning.bufferedinputstream.ex;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class BufferedInputStreamEx1 {

    // C:/test/test.txt
    private static String file_path = "/Volumes/Data/test/test.txt";
    
    public static void main(String[] args) throws IOException {
        File file = new File(file_path);
        InputStream is = new FileInputStream(file);

        BufferedInputStream bis = new BufferedInputStream(is);
        
        int code;
        while((code = bis.read())!= -1) {
            System.out.println(code +" " + (char)code);
        }
        bis.close();
    }
}
Output:
84 T
104 h
105 i
115 s
32  
105 i
115 s
32  
116 t
104 h
101 e
32  
76 L
97 a
116 t
105 i
110 n
32  
116 t
101 e
120 x
116 t
10
Z.B: Verwenden Sie BufferedInputStream um eine URL zu lesen, um die Programmleistung zu verbessern.
BufferedInputStreamEx2.java
package org.o7planning.bufferedinputstream.ex;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

public class BufferedInputStreamEx2 {
    private static String urlString = "https://s3.o7planning.com/images/smile-32.png";

    public static void main(String[] args) throws IOException {
        URL url = new URL(urlString);
        InputStream is = url.openConnection().getInputStream();

        BufferedInputStream bis = new BufferedInputStream(is);

        int code;
        while ((code = bis.read()) != -1) {
            System.out.print((char) code);
        }
        bis.close();
    }
}

Die Anleitungen Java IO

Show More