logo

Символен поток срещу байтов поток в Java

Потокът е непрекъснат поток от данни. В Java I/O потоците се използват за четене от входни източници или запис в изходни дестинации, като например файлове. Те предоставят начин за последователен достъп до данните. Пакетът java.io включва класове за обработка както на потоци от байтове, така и на потоци от символи, както и за конвертиране между тях.

Раджиникант
  • Входящ поток: чете данни от източника. 
  • Изходен поток: записва данни към дестинация. 

Кога да използвате символен поток над байтов поток:

В Java символите се съхраняват с помощта на конвенциите на Unicode. Потокът от символи е полезен, когато искаме да обработваме текстови файлове. Тези текстови файлове могат да се обработват символ по символ. Размерът на символа обикновено е 16 бита.



Кога да използвате байтов поток над символен поток:

Байт ориентирано чете байт по байт. Поток от байтове е подходящ за обработка на необработени данни като двоични файлове.

видове двоично дърво

Ключови моменти при използване и работа с някой от горните потоци:

  • Класовете на символния поток обикновено завършват с Reader/Writer, докато класовете на байтовия поток завършват с InputStream/OutputStream.
  • Примерните кодове в тази статия използват небуферирани потоци, които са по-малко ефективни. За по-добра производителност обикновено ги обвиваме с BufferedReader/BufferedWriter (потоци от знаци) или BufferedInputStream/BufferedOutputStream (потоци от байтове).
  • Винаги затваряйте потоците след употреба, за да освободите ресурси и да предотвратите грешки.
  • Горните кодове може да не се изпълняват в онлайн компилатори, тъй като файловете може да не съществуват.

Поток от знаци

В Java символите се съхраняват с помощта на конвенциите на Unicode. Потокът от знаци автоматично ни позволява да четем/записваме данни символ по знак. Например FileReader и FileWriter са потоци от символи, използвани за четене от източника и запис до дестинацията.

не_уникод_байтове' title=Потоци от символи

Пример

Java
import java.io.*; public class GFG {  public static void main(String[] args)  throws IOException  {  // Initially assigning null as we have not read anything  FileReader sourceStream = null;  try {  // Reading from file  sourceStream = new FileReader('/Users/mayanksolanki/Desktop/demo.rtf');  // Reading sourcefile and writing content to target file character by character.  int temp;  // If there is content inside file than read  while ((temp = sourceStream.read()) != -1)  System.out.println((char)temp);    System.out.print('Program successfully executed');  }    finally {  if (sourceStream != null)  sourceStream.close();  }  } } 

Изход:

Записва съдържание в целевия файл символ по символ

Програмата е изпълнена успешно

Байтов поток

Байтовият поток в Java е поток, който обработва вход и изход на необработени 8-битови двоични данни. Използва се главно за четене и писане на нетекстови данни като изображения, аудио, видео или всеки двоичен файл. например FileInputStream се използва за четене от източника и FileOutputStream за запис в дестинацията.

java край за цикъл

Пример:

Java
import java.io.*; public class GFG {  public static void main(String[] args)  throws IOException  {  // Initially assigning null ot objects for reading and writing to file  FileInputStream sourceStream = null;  FileOutputStream targetStream = null;  try {  // Passing the files via local directory  sourceStream = new FileInputStream('/Users/mayanksolanki/Desktop/demo.rtf');  targetStream = new FileOutputStream('/Users/mayanksolanki/Desktop/democopy.rtf');  // Reading source file and writing content to file byte by byte  int temp;  // If there is content inside file than read  while ((temp = sourceStream.read()) != -1)  targetStream.write((byte)temp);    System.out.print('Program successfully executed');  }  // finally block that executes for sure where we are closing file connections to avoid memory leakage  finally {  if (sourceStream != null)  sourceStream.close();  if (targetStream != null)  targetStream.close();  }  } } 

Изход:

Програмата е изпълнена успешно

Разлики в поток от символи срещу поток от байтове

АспектПоток от знациБайтов поток
Обработен тип данни16-битови Unicode знаци (текст)8-битови необработени данни (двоични)
Занятията завършват сЧитател / ПисателInputStream / OutputStream
Подходящ заТекстови файлове Unicode данниИзображения аудио видео двоични файлове
ПреобразуванеАвтоматично преобразува байтове в знациНикое преобразуване не работи с необработени байтове
ПримериFileReader FileWriterFileInputStream FileOutputStream

Свързана статия

  • Java IO - Вход/Изход в Java с примери