RandomAccessFile(String fileName, String mode)
другим аргументом mode задається режим відкриття файлу. Це може бути рядок "r" — відкриття файлу тільки для читання, або "rw" — відкриття файлу для читання і запису. Цей клас зібрав всі корисні методи роботи з файлом. Він містить всі методи класів DataІnputstream і DataOutputstream, крім того, дозволяє прочитати відразу цілий рядок методом readln() і відшукати потрібні дані у файлі. Байти файлу нумеруються, починаючи з 0, подібно елементам масиву. Файл має неявний покажчик поточної позиції. Читання і запис відбувається, починаючи з поточної позиції файла. При відкритті файлу конструктором, покажчик стоїть на початку файлу, в позиції 0. Поточну позицію можна взнати методом getFiiePointer(). Кожне читання або запис переміщає покажчик на довжину прочитаного або записаного даного. Завжди можна перемістити покажчик в нову позицію pos методом seek (long pos). Метод seek(0) переміщає покажчик на початок файлу. В класі немає методів перетворення символів в байти і назад по кодовим таблицях, тому він не пристосований для роботи з кирилицею.
Значних зусиль вартує організовувати правильний обмін інформацією між підпроцесами. В пакеті java.io є чотири класи pipedxxx, полегшуючі це завдання. В одному підпроцесі — джерелі інформації — створюється об’єкт класу PipedWriter або PipedOutputstream, в який записується інформація методами write() цих класів. В другому підпроцесі — приймачу інформації — формується об’єкт класу PipedReader або PipedІnputstream. Він зв’язується з об’єктом-джерелом за допомогою конструктора або спеціальним методом connect(), і читає інформацію методами read(). Джерело і приймач можна створити і зв’язати в зворотному порядку.
Так створюється однонаправлений канал інформації. Це деяка область оперативної пам’яті, до якої організований сумісний доступ двох або більше підпроцесів. Доступ синхронізується, записуючі процеси не можуть завадити читанню. Якщо треба організувати двосторонній обмін інформацією, то створюються два канали.
В лістинзі метод run() класу Source генерує інформацію (цілі числа k) і передає їх в канал методом pw. write (k); метод run() класу Target читає інформацію із каналу методом pr.read(); кінці каналу зв’язуються за допомогою конструктора класу Target:
import java.io.*;
class Target extends Thread{
Дата добавления: 2014-12-10; просмотров: 939;