Какая разница между потоками байтов и потоками символов

Поток - это способ последовательного доступа к файлу. В Streams вы можете обрабатывать данные по одному, поскольку массовые операции с ними недоступны. Но потоки поддерживают огромный диапазон источников и мест назначения, включая файл диска, массивы, другие устройства, другие программы и т. Д. В Java байт - это не то же самое, что символ. Следовательно, поток байтов отличается от потока символов. Таким образом, Java определяет два типа потоков: потоки байтов и потоки символов.

Потоки байтов

Поток байта доступа к байту файла байтом. Java-программы используют байтовые потоки для выполнения ввода и вывода 8-битных байтов. Он подходит для любого типа файлов, однако не совсем подходит для текстовых файлов. Например, если файл использует кодировку Unicode, а символ представлен двумя байтами, поток байтов будет обрабатывать их отдельно, и вам нужно будет сделать преобразование самостоятельно. Байт-ориентированные потоки не используют никакой схемы кодирования, в то время как ориентированные на символы потоки используют схему кодирования символов (UNICODE). Все классы потока байтов происходят от InputStream и OutputStream.

 
import Java.io.*;
public class TestClass{
  public static void main(String[] args) {
    FileInputStream fis = null;
    FileOutputStream fos = null;
    try {
      fis = new FileInputStream("in.txt");
      fos = new FileOutputStream ("out.txt");
      int temp;
      while ((temp = fis.read()) != -1) // чтение байта байтом
      fos.write((byte)temp);        // запись байта байтом
      if (fis != null)
      fis.close();
      if (fos != null)
      fos.close();
    }catch(Exception e){
      System.out.println(e);
    }
  }
}

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

Поток символов будет читать символ файла по символу. Поток символов - это концепция более высокого уровня, чем Byte Stream. Поток символов - это, фактически, поток байтов, который был обернут логикой, которая позволяет ему выводить символы из определенной кодировки. Это означает, что для корректной работы символьного потока требуется кодировка файла. Поток символов может поддерживать все типы наборов символов ASCII, Unicode, UTF-8, UTF-16 и т. Д. Все классы потоков символов происходят от Reader и Writer.

Пример

 
import Java.io.*;
public class TestClass{
  public static void main(String[] args) {
    FileReader reader = null;
    try {
      reader = new FileReader("in.txt");
      int fChar;
      while ((fChar = reader.read()) != -1) // чтение char по char
        System.out.println((char)fChar);          // писать char по char
    }catch(Exception e){
      System.out.println(e);
    }
  }
}

Источник: http://net-informations.com/Java/cJava/stream.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector