Рубрики

Символьный поток против байтового потока в Java

Поток ввода / вывода

Поток — это метод последовательного доступа к файлу. Поток ввода / вывода означает источник ввода или назначение вывода, представляющий различные типы источников, например, дисковые файлы. В пакете java.io предусмотрены классы, которые позволяют преобразовывать потоки символов Unicode в потоки байтов текста, отличного от Unicode.

Поток — последовательность данных.
Входной поток: читает данные из источника.
Выходной поток: записывает данные в место назначения.

Символьный поток

В Java символы хранятся с использованием соглашений Unicode (подробности см. В этом разделе). Символьный поток автоматически позволяет нам читать / записывать данные символ за символом. Например, FileReader и FileWriter — это символьные потоки, используемые для чтения из источника и записи в место назначения.

// Java-программа, иллюстрирующая, что мы можем прочитать файл в
// удобочитаемый формат с использованием FileReader

import java.io.*;   // Доступ к FileReader, FileWriter, IOException

public class GfG

{

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

    {

        FileReader sourceStream = null;

        try 

        {

            sourceStream = new FileReader("test.txt");

              

            // Чтение исходного файла и запись содержимого в

            // целевой файл символ за символом.

            int temp;

            while ((temp = sourceStream.read()) != -1)

                 System.out.println((char)temp);

        }

        finally 

        {            

            // Закрытие потока, поскольку он больше не используется

            if (sourceStream != null)            

                sourceStream.close();         

        }

    }

}

Выход :

Shows contents of file test.txt 

Поток байтов

Байтовые потоки обрабатывают данные побайтно (8 бит). Например, FileInputStream используется для чтения из источника, а FileOutputStream — для записи в место назначения.

// Java-программа, иллюстрирующая поток байтов для копирования
// содержимое одного файла в другой файл.

import java.io.*;   

public class BStream

{

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

    {

        FileInputStream sourceStream = null;

        FileOutputStream targetStream = null;

  

        try 

        {

            sourceStream = new FileInputStream("sorcefile.txt");

            targetStream = new FileOutputStream ("targetfile.txt");

  

            // Чтение исходного файла и запись содержимого в цель

            // файл побайтовый

            int temp;

            while ((temp = sourceStream.read()) != -1)

                targetStream.write((byte)temp);            

        }

        finally 

        {

            if (sourceStream != null)

                sourceStream.close();            

            if (targetStream != null)            

                targetStream.close();            

        }

    }

}

Когда использовать символьный поток поверх байтового потока?

  • В Java символы хранятся с использованием соглашений Unicode. Символьный поток полезен, когда мы хотим обработать текстовые файлы. Эти текстовые файлы могут быть обработаны символ за символом. Размер символа обычно составляет 16 бит.

Когда использовать Byte Stream поверх Character Stream?

  • Байт-ориентированный читает байтов за байтом. Поток байтов подходит для обработки необработанных данных, таких как двоичные файлы.

Примечания:

  • Имена символьных потоков обычно заканчиваются Reader / Writer, а имена байтовых потоков заканчиваются InputStream / OutputStream
  • Потоки, используемые в примерах кодов, являются небуферизованными потоками и менее эффективны. Мы обычно используем их с буферизованными читателями / писателями для эффективности. Вскоре мы обсудим использование классов BufferedReader / BufferedWriter (для потока символов) и BufferedInputStream / BufferedOutputStream (для потока байтов).
  • Всегда рекомендуется закрывать поток, если он больше не используется. Это гарантирует, что потоки не будут затронуты, если произойдет какая-либо ошибка.
  • Приведенные выше коды могут не работать в онлайн-компиляторах, так как файлы могут не существовать.

Эта статья предоставлена Мохит Гупта . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Символьный поток против байтового потока в Java

0.00 (0%) 0 votes