Библиотечните класове IO на Java са разделени за вход и изхад, както може да видите с вашия броузър от йерархията онлайн на класовете на Java. По наследство всичките класове извлечени от InputStream имат основни методи наречени read( ) за четене на единствен байт или масив от байтове. Подобно, всички класове наследени от OutputStream имат основни методи наречени write( ) за четене на единствен байт или масив от байтове. Обаче общо взето няма да използвате тези методи; те съществуват за да може по-усложнените класове да ги използуват, като се осигурява по-удобен интерфейс. Така рядко ще създавате потоков обект чрез използване на един само клас, а ще слагате няколко обекта заедно за да се постигне желаната функционалност. Фактът че използвате няколко класа за създаване на обект за един поток е основната причина потоковата библиотека на Java да смущава.
Полезно е да се категоризират класовете по тяхната функционалност. Проектантите са започнали с мисълта че всичко което ще има работа с входа ще се наследява от InputStream и всичко за изход — от OutputStream.
Типове на InputStream
Задачата на InputStream е да представи класовете които въвеждат от различни източници. Източниците могат да бъдат (и всеки има асоцииран подклас на InputStream):
-
Масив от битове
-
String обект
-
Файл
-
“тръба,” която работи като физически съществуваща тръба: слагате неща от едната страна и те излизат от другата
-
Последователност от други потоци, така че да може да ги съберете в един поток
-
Други източници, такива като Internet връзка. (Този ще бъде разискван в по-късна глава.)
Освен това, FilterInputStream е също тип InputStream, за да даде базов клас за "декориращи" класове които закачат атрибути или полезни интерфейси на входен поток. Това е дискутирано по-нататък.
Table 10-1. Типове InputStream
-
Клас
|
Функция
|
Аргументи на конструктора
|
Как да се използва
|
ByteArray-InputStream
|
Позволява буфер в паметта да се използва като InputStream.
|
Буфер от който да се извлекат байтовете.
|
Като източник на данни. Свържете го с FilterInputStream обект за да имате полезен интерфейс.
|
StringBuffer-InputStream
|
Превръща String в InputStream.
|
String. Подлежащата реализация фактически използва StringBuffer.
|
Като източник на данни. Свържете го към FilterInputStream обект за да даде полезен интерфейс.
|
File-InputStream
|
За четене на информация от файл.
|
String представящ файловото име или File или FileDescriptor обект.
|
Като източник на данни. Свържете го към FilterInputStream обект за да даде полезен интерфейс.
|
-
Piped-InputStream
|
Дава данните които са били написани в PipedOutput-Stream. Реализира концепцията за “piping”.
|
PipedOutputStream
|
Като източник на данни при многонишковост. Свържете го с FilterInputStream обект за да даде полезен интерфейс.
|
Sequence-InputStream
|
Превръща два или повече InputStream обекта в единствен InputStream.
|
Два InputStream обекта или Enumeration за контейнер от InputStream обекти.
|
Като източник на данни. Свържете го с FilterInputStream обект за да даде полезен интерфейс.
|
Filter-InputStream
|
Абстракнет клас който служи като интерфейс към декоратори, които дават полезни черти на InputStream класовете. Вж. Табл. 10-3.
|
Вж. Табл. 10-3.
|
Вж. Табл. 10-3.
| Типове OutputStream
Тази категория съдържа класове които решават къде ще ходят вашите данни: масив от байтове (не String, обаче; предполагаемо може да създадете такъв от масив от байтове), файл или “тръба.”
Освен това обектът FilterOutputStream дава базов клас за "декориращи" класове които задават атрибути или полезна функционалност на изходните потоци. Това се дискутира по-късно.
Таблица 10-2. Типове OutputStream
-
Клас
|
Функция
|
Аргументи на конструктора
|
Как да се използва
|
ByteArray-OutputStream
|
Създава буфер в паментта. Всички данни които изпращате към потока се слагат в този буфер.
|
Опционна дължина на буфера
|
Определя направление за данните ви. Свържете го с FilterOutputStream обект за полезен интерфейс.
|
File-OutputStream
|
За изпращане на информация във файл.
|
String представящ името на файла или File или FileDescriptor обект.
|
Определя направление за данните ви. Свържете го с FilterOutputStream обект за полезен интерфейс.
|
Piped-OutputStream
|
Всяка информация записана тук се оказва вход за асоциирания PipedInput-Stream. Реализира “тръбната” концепция.
|
PipedInputStream
|
Определя направление за данните ви при многонишковост. Свържете го с FilterOutputStream обект за полезен интерфейс.
|
Filter-OutputStream
|
Абстрактен клас който е интерфейс към декоратори, които дават полезни черти на OutputStream класовете. Виж Таблица 10-4.
|
Виж Таблица 10-4.
|
Виж Таблица 10-4.
|
Сподели с приятели: |