Поиск…


Вступление

Читатели и писатели и их соответствующие подклассы обеспечивают простой ввод-вывод для текстовых / символьных данных.

BufferedReader

Вступление

Класс BufferedReader является оберткой для других классов Reader которая выполняет две основные цели:

  1. BufferedReader обеспечивает буферизацию для обернутого Reader . Это позволяет приложению читать символы по одному без лишних накладных расходов ввода-вывода.

  2. BufferedReader обеспечивает функциональность для чтения текста строки за раз.

Основы использования BufferedReader

Обычный шаблон для использования BufferedReader выглядит следующим образом. Во-первых, вы получаете Reader , с которого хотите читать символы. Затем вы создаете экземпляр BufferedReader который обертывает Reader . Затем вы читаете символьные данные. Наконец, вы закрываете BufferedReader который закрывает завернутый «Reader». Например:

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

Вы можете применить этот шаблон к любому Reader

Заметки:

  1. Мы использовали Java 7 (или более поздние) try-with-resources, чтобы гарантировать, что основной читатель всегда закрыт. Это позволяет избежать потенциальной утечки ресурсов. В более ранних версиях Java вы должны явно закрыть BufferedReader в блоке finally .

  2. Код внутри блока try практически идентичен тому, что мы будем использовать, если мы будем читать непосредственно из FileReader . Фактически, BufferedReader функционирует точно так же, как и Reader который он будет обертывать. Разница в том, что эта версия намного эффективнее.

Размер буфера BufferedReader

Метод BufferedReader.readLine ()

Пример: чтение всех строк файла в список

Это делается путем ввода каждой строки в файл и добавления ее в List<String> . Затем список возвращается:

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 предоставляет более сжатый способ сделать это с помощью метода 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

Класс Java StringWriter представляет собой поток символов, который собирает выходные данные из строкового буфера, который может использоваться для построения строки.

Класс StringWriter расширяет класс Writer.

В классе StringWriter системные ресурсы, такие как сетевые сокеты и файлы, не используются, поэтому закрытие StringWriter не требуется.

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

Вышеприведенный пример помогает нам узнать простой пример StringWriter с использованием BufferedReader для чтения данных файла из потока.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow