Потік — це безперервний потік даних. У Java потоки вводу/виводу використовуються для читання з джерел введення або запису в місця призначення, такі як файли. Вони забезпечують спосіб послідовного доступу до даних. Пакет java.io містить класи для обробки як потоків байтів, так і потоків символів, а також для перетворення між ними.
Команда grep в Linux
- Вхідний потік: читає дані з джерела.
- Вихідний потік: записує дані до місця призначення.
Коли використовувати потік символів замість потоку байтів:
У Java символи зберігаються за умовами Unicode. Потік символів корисний, коли ми хочемо обробити текстові файли. Ці текстові файли можна обробляти символ за символом. Розмір символу зазвичай становить 16 біт.
Коли використовувати потік байтів замість потоку символів:
Побайтно орієнтоване читання байт за байтом. Потік байтів підходить для обробки необроблених даних, наприклад двійкових файлів.
чому інтерфейс маркера в java
Ключові моменти під час використання та роботи з будь-яким із наведених вище потоків:
- Класи потоку символів зазвичай закінчуються на 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 для запису в пункт призначення.
Команда zip в Linux
приклад:
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 з прикладами