s буде складатися з двох елементів: 10 і 11. p align="justify"> Використовувати класи ByteArrayInputStream і ByteArrayOutputStream може бути дуже зручно, коли потрібно перевірити, що саме записується у вихідний потік. Наприклад, при налагодженні і тестуванні складних процесів запису і читання з потоків. Ці класи хороші тим, що дозволяють відразу переглянути результат і не потрібно створювати ні файл, ні мережеве з'єднання, ні що-небудь ще. p align="justify"> Класи FileInputStream і FileOutputStream
Клас FileInputStream використовується для читання даних з файлу. Конструктор такого класу як параметр приймає назву файлу, з якого буде проводитися зчитування. При вказівці рядка імені файлу потрібно враховувати, що вона буде прямо передана операційній системі, тому формат імені файлу і шляху до нього може розрізнятися на різних платформах. Якщо при виклику цього конструктора передати рядок, що вказує на неіснуючий файл або каталог, то буде кинуто java.io.FileNotFoundException. Якщо ж об'єкт успішно створений, то при виклику його методів read () повертаються значення будуть зчитуватися із зазначеного файлу. p align="justify"> Для запису байт в файл використовується клас FileOutputStream. При створенні об'єктів цього класу, тобто при викликах його конструкторів, крім імені файлу, також можна вказати, чи будуть дані дописуватися в кінець файлу, або файл буде перезаписаний. Якщо вказаний файл не існує, то відразу після створення FileOutputStream він буде створений. При викликах методів write () передані значення будуть записуватися в цей файл. По закінченні роботи необхідно викликати метод close (), щоб повідомити системі, що робота по запису файлу закінчена. Приклад:
[] bytesToWrite = {1, 2, 3}; [] bytesReaded = new byte [10]; fileName = "d: test.txt"; {
// Створити вихідний потокoutFile = new FileOutputStream (fileName);
System.out.println ("Файл відкритий для запису");
// Записати массів.write (bytesToWrite);. out.println ("Записано:В« + bytesToWrite.length + "байт");
// По закінченні використання повинен бути закрит.close ();. out.println ("Вихідний потік закрито");
// Створити вхідний потокinFile = new FileInputStream (fileName);
System.out.println ("Файл відкритий для читання");
// Дізнатися, скільки байт готове до счітиваніюbytesAvailable = inFile.available (),. out.println ("Готово до зчитування:" + bytesAvailable + "байт"),
// Рахувати в массівcount = inFile.read (bytesReaded, 0, bytesAvailable);. out.println ("вважає:" + count + "байт"); (int i = 0 ; i
System.out.println ("Вхідний потік закрито");
} catch (FileNotFoundException e) {. out.println ("Не можу записати у файл:" + fileName);
} catch (IOException e) {. out.println ("Помилка введення/виводу:" + e.toString ());
}
Результатом роботи програми буде:
Файл відкритий для запису
Записано: 3 байт
Вихідний потік закрито
Файл відкритий для читання
Готово до зчитування: 3 байт
вважали: 3 байт
, 2,3,
Вхідний потік закрито
При роботі з FileInputStream метод available () практично напевно поверне довжину файлу, тобто число байт, скільки взагалі з нього можна рахувати. Але не варто закладатися на це при написанні програм, які повинні стійко працювати на різних платформах, - метод available () повертає число байт, яке може бути на даний момент лічено без блокування. Той факт, що, швидше за все, це число і буде довжиною файлу, є всього лише окремим випадком роботи на деяких платформах. p align="justify"> У наведеному прикладі для наочності закриття потоків вироблялося відразу ж після закінчення їх використання в основному блоці. Однак краще закривати потоки в finally блоці. br/>
} finally {{inFile.close ();} catch (IOException e) {};
}
Такий підхід гарантує, що потік буде закрито, і будуть звільнені всі пов'язані з ним системні ресурси. p align="justify"> Класи PipedInputStream і PipedOutputStream
Класи Pi pedInputStream і PipedOutputStream характеризуються тим, що їх об'єкти завжди використовуються в парі - до одного об'єкту PipedInputStream прив'язується (підключається) один об'єкт PipedOutputStream. Вони можуть бути корисні, якщо в програмі необхідно організувати обмін даними між модулями (наприклад, між потоками виконання). p align="justify"> Ці ...