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