Символен поток срещу байтов поток в Java
Потокът е непрекъснат поток от данни. В Java I/O потоците се използват за четене от входни източници или запис в изходни дестинации, като например файлове. Те предоставят начин за последователен достъп до данните. Пакетът java.io включва класове за обработка както на потоци от байтове, така и на потоци от символи, както и за конвертиране между тях.
- Входящ поток: чете данни от източника.
- Изходен поток: записва данни към дестинация.
Кога да използвате символен поток над байтов поток:
В Java символите се съхраняват с помощта на конвенциите на Unicode. Потокът от символи е полезен, когато искаме да обработваме текстови файлове. Тези текстови файлове могат да се обработват символ по символ. Размерът на символа обикновено е 16 бита.
Кога да използвате байтов поток над символен поток:
Байт ориентирано чете байт по байт. Поток от байтове е подходящ за обработка на необработени данни като двоични файлове.
Ключови моменти при използване и работа с някой от горните потоци:
- Класовете на символния поток обикновено завършват с Reader/Writer, докато класовете на байтовия поток завършват с InputStream/OutputStream.
- Примерните кодове в тази статия използват небуферирани потоци, които са по-малко ефективни. За по-добра производителност обикновено ги обвиваме с BufferedReader/BufferedWriter (потоци от знаци) или BufferedInputStream/BufferedOutputStream (потоци от байтове).
- Винаги затваряйте потоците след употреба, за да освободите ресурси и да предотвратите грешки.
- Горните кодове може да не се изпълняват в онлайн компилатори, тъй като файловете може да не съществуват.
Поток от знаци
В Java символите се съхраняват с помощта на конвенциите на Unicode. Потокът от знаци автоматично ни позволява да четем/записваме данни символ по знак. Например FileReader и FileWriter са потоци от символи, използвани за четене от източника и запис до дестинацията.
Потоци от символи Пример
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 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 FileWriter | FileInputStream FileOutputStream |
Свързана статия
- Java IO - Вход/Изход в Java с примери