Zoeken…


Invoering

Lezers en schrijvers en hun respectieve subklassen bieden eenvoudige I / O voor op tekst / tekens gebaseerde gegevens.

BufferedReader

Invoering

De klasse BufferedReader is een wrapper voor andere klassen Reader die twee hoofddoelen dient:

  1. Een BufferedReader biedt buffering voor de ingepakte Reader . Hierdoor kan een toepassing tekens één voor één lezen zonder onnodige I / O-overheadkosten.

  2. Een BufferedReader biedt functionaliteit om tekst regel voor regel te lezen.

Basisprincipes van het gebruik van een BufferedReader

Het normale patroon voor het gebruik van een BufferedReader is als volgt. Eerst verkrijgt u de Reader waarvan u tekens wilt lezen. Vervolgens maakt u een BufferedReader die de Reader verpakt. Dan lees je karaktergegevens. Eindelijk sluit u de BufferedReader die de omwikkelde `Reader sluit. Bijvoorbeeld:

File someFile = new File(...);
int aCount = 0;
try (FileReader fr = new FileReader(someFile);
     BufferedReader br = new BufferedReader(fr)) {
    // Count the number of 'a' characters.
    int ch;
    while ((ch = br.read()) != -1) {
        if (ch == 'a') {
            aCount++;
        }
    }
    System.out.println("There are " + aCount + " 'a' characters in " + someFile);
}

U kunt dit patroon op elke Reader toepassen

Opmerkingen:

  1. We hebben Java 7 (of later) try-with-resources gebruikt om ervoor te zorgen dat de onderliggende lezer altijd gesloten is. Dit voorkomt een potentieel lekken van middelen. In eerdere versies van Java, zou expliciet in de buurt van de BufferedReader in een finally blokkeren.

  2. De code in het try blok is vrijwel identiek aan wat we zouden gebruiken als we rechtstreeks vanuit de FileReader zouden lezen. In feite functioneert een BufferedReader precies zoals de Reader die hij zich zou gedragen. Het verschil is dat deze versie een stuk efficiënter is.

De buffergrootte van de buffer

De methode BufferedReader.readLine ()

Voorbeeld: alle regels van een bestand in een lijst lezen

Dit wordt gedaan door elke regel in een bestand op te nemen en toe te voegen aan een List<String> . De lijst wordt dan teruggegeven:

public List<String> getAllLines(String filename) throws IOException {
    List<String> lines = new ArrayList<String>();
    try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
        String line = null;
        while ((line = reader.readLine) != null) {
            lines.add(line);
        }
    }
    return lines;
}

Java 8 biedt een meer beknopte manier om dit te doen met behulp van de methode lines() :

public List<String> getAllLines(String filename) throws IOException {
    try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
        return br.lines().collect(Collectors.toList());
    }
    return Collections.empty();
}

StringWriter-voorbeeld

Java StringWriter-klasse is een tekenstroom die uitvoer van tekenreeksbuffer verzamelt en waarmee een tekenreeks kan worden geconstrueerd.

De klasse StringWriter breidt de klasse Writer uit.

In de StringWriter-klasse worden systeembronnen zoals netwerksockets en bestanden niet gebruikt, daarom is het sluiten van de StringWriter niet nodig.

import java.io.*;  
public class StringWriterDemo {  
    public static void main(String[] args) throws IOException {  
        char[] ary = new char[1024];  
        StringWriter writer = new StringWriter();  
        FileInputStream input = null;  
        BufferedReader buffer = null;  
        input = new FileInputStream("c://stringwriter.txt");  
        buffer = new BufferedReader(new InputStreamReader(input, "UTF-8"));  
        int x;  
        while ((x = buffer.read(ary)) != -1) {  
                   writer.write(ary, 0, x);  
        }  
        System.out.println(writer.toString());        
        writer.close();  
        buffer.close();  
    }  
}

Het bovenstaande voorbeeld helpt ons om een eenvoudig voorbeeld te kennen van StringWriter die BufferedReader gebruikt om bestandsgegevens uit de stream te lezen.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow