Szukaj…


Wprowadzenie

Czytelnicy i pisarze oraz odpowiadające im podklasy zapewniają proste operacje we / wy dla danych tekstowych / znakowych.

BufferedReader

Wprowadzenie

Klasa BufferedReader to opakowanie dla innych klas Reader , które służy dwóm głównym celom:

  1. BufferedReader zapewnia buforowanie owiniętego Reader . Pozwala to aplikacji na odczytywanie znaków pojedynczo, bez zbędnych narzutów we / wy.

  2. BufferedReader zapewnia funkcjonalność odczytu tekstu linii na raz.

Podstawy korzystania z BufferedReader

Normalny wzorzec korzystania z BufferedReader jest następujący. Najpierw otrzymasz Reader , z którego chcesz odczytać postacie. Następnie utwórz instancję BufferedReader która otacza Reader . Następnie czytasz dane postaci. Na koniec BufferedReader który zamyka zawinięty `Reader. Na przykład:

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);
}

Możesz zastosować ten wzór do dowolnego Reader

Uwagi:

  1. Użyliśmy środowiska Java 7 (lub nowszego) try-with-resources, aby zapewnić, że podstawowy czytnik jest zawsze zamknięty. Pozwala to uniknąć potencjalnego wycieku zasobów. We wcześniejszych wersjach Javy jawnie BufferedReader w finally .

  2. Kod w bloku try jest praktycznie identyczny z tym, którego moglibyśmy użyć, gdybyśmy czytali bezpośrednio z FileReader . W rzeczywistości BufferedReader działa dokładnie tak, jak zachowywałby się BufferedReader przez niego Reader . Różnica polega na tym, że ta wersja jest znacznie wydajniejsza.

Rozmiar bufora BufferedReader

Metoda BufferedReader.readLine ()

Przykład: wczytywanie wszystkich wierszy pliku do listy

Odbywa się to poprzez umieszczenie każdej linii w pliku i dodanie jej do List<String> . Lista jest następnie zwracana:

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 zapewnia bardziej zwięzły sposób na zrobienie tego za pomocą metody 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();
}

Przykład StringWriter

Klasa Java StringWriter to strumień znaków, który zbiera dane wyjściowe z bufora ciągów, których można użyć do skonstruowania ciągu.

Klasa StringWriter rozszerza klasę Writer.

W klasie StringWriter zasoby systemowe, takie jak gniazda sieciowe i pliki, nie są używane, dlatego zamknięcie StringWriter nie jest konieczne.

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();  
    }  
}

Powyższy przykład pomaga nam poznać prosty przykład StringWriter używającego BufferedReader do odczytu danych pliku ze strumienia.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow