Рубрики
Без рубрики

Потоки символов

Введение Второй пост о потоках, он будет посвящен потокам символов в Java. У меня есть… Помечено как java, новички, потоки.

  • Второй пост о потоках, он будет посвящен потокам символов на Java. Я создал видео-версию YouTube , поэтому, пожалуйста, обязательно проверьте и это.

Потоки символов

  • Java хранит значения символов с использованием соглашений Юникода. Потоки символов автоматически переводят этот внутренний формат в наш локальный набор символов и обратно, что зависит от того, на каком языке вы написали код.

Юникод

  • Unicode – это стандарт компьютерной индустрии для последовательного и уникального кодирования символов, используемых в любых письменных языках по всему миру.

  • Все классы символьных потоков являются потомками классов Reader и Writer, которые являются абстрактными классами для чтения и записи потоков символов. Затем мы можем использовать эти абстрактные классы для специализации в зависимости от того, какие данные мы читаем и записываем.

  • Ниже будет приведен исходный код этого проекта. После блока кода я буду описывать каждую строку кода в меру своих возможностей.

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CopyCharacters {
    public static void main(String[] args) throws IOException {

        FileReader inputStream = null;
        FileWriter outputStream = null;

        try {
            inputStream = new FileReader("characterinput.txt");
            outputStream = new FileWriter("characteroutput.txt");

            int c;
            while ((c = inputStream.read()) != -1) {
                outputStream.write(c);
            }
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
            if (outputStream != null) {
                outputStream.close();
            }
        }
    }
}

Объяснение кода

  • 1) бросает : бросает используется в сигнатуре метода main, чтобы сообщить компилятору, что основной метод имеет возможность выдать исключение. throws также сообщает компилятору, что он делегирует ответственность за обработку этого исключения вызывающему методу. Однако, поскольку вызывающий метод отсутствует, и JVM не может найти для него подходящий обработчик, наша программа быстро завершит работу при возникновении исключения. Я считаю, что этот учебник неправильно обрабатывает исключения, потому что смысл этого проекта – потоки символов, а не исключения.

  • 2) Исключение IOException : это должно сигнализировать о том, что может произойти исключение ввода-вывода. Это всего лишь обобщение операций ввода-вывода

  • 3) Средство чтения файлов : это просто удобный класс для чтения символьных файлов, и поскольку мы дали ему строку, будет запущен соответствующий конструктор, и он будет считан из файла с именем “characterinput.txt ” в корневом каталоге. Если этого файла нет в корневом каталоге, то возникнет исключение.

  • 4) FileWriter : это также удобный класс, но для записи символьных файлов. Поскольку мы дали ему строку, будет вызван соответствующий конструктор, и он запишет в файл с именем “characteroutput.txt ” в корневом каталоге.

  • 5) read() : он вернет один символ или -1, если достигнут конец потока. Этот метод позволяет нам считывать форму указанного файла по одному символу за раз

  • 6) write() : записывает один символ в выходной файл. Этот метод позволяет нам записывать в указанный файл по одному символу за раз.

  • 7) закрыть() : это закроет поток, но сначала он очистит его.

Что такое промывка ручья?

  • Когда мы записываем данные в поток, они записываются не сразу, а буферизуются. Хотя я знаю, что это не отвечает на вопрос, мы сначала должны понять буферизованные потоки, прежде чем сможем понять, что делает очистка потока.

Буферизованный поток

  • Итак, сначала давайте поговорим о небуферизованных потоках. Когда поток небуферизован, каждый запрос на чтение или запись обрабатывается непосредственно базовой ОС (операционной системой). Это может сделать работу очень неэффективной, потому что каждый запрос часто может вызвать более дорогостоящие операции, такие как доступ к диску, сетевая активность и многое другое.

  • Чтобы уменьшить эти огромные накладные расходы, Java представила буферизованные потоки ввода-вывода. Буферизованные входные потоки считывают данные из области временной памяти, называемой буфером. Собственный API вызывается только тогда, когда буфер пуст. Буферизованные выходные потоки записывают данные в буфер, а собственный API вызывается только тогда, когда буфер заполнен. Хорошая ментальная модель представлена здесь , она находится в node.js но идея все та же.

Что такое промывка ручья

  • Ну, это когда мы полностью очищаем буфер перед закрытием потока. Зачем нам это делать? ну, это для того, чтобы убедиться, что мы действительно отправили данные на устройство вывода, а не просто ждем их отправки.
  • Спасибо, что нашли время в свой день, чтобы прочитать этот мой пост в блоге. Если у вас есть какие-либо вопросы или проблемы, пожалуйста, прокомментируйте ниже или свяжитесь со мной по адресу Твиттер .
  • Также обязательно загляните на мой канал YouTube для получения дополнительных уроков по программированию.

Оригинал: “https://dev.to/theplebdev/character-streams-571e”