Клас InputStream

В абстрактному класі InputStream оголошуються методи для читання із заданого джерела InputStream є базовим класом для більшості вхідних потоків в javaio і містить наступні методи:

public InputStream()

містить тільки безаргументний конструктор public abstract int read() throws IOException

Читає з потоку один байт даних і повертає прочитане значення, що лежить в діапазоні від 0 до 255 (чи не від -128 до 127) При досягненні кінця потоку повертається прапор -1 Метод блокує роботу програми до появи значення на вході

public int read(byte[] buf) throws IOException

Читає дані в масив байтів Метод блокує роботу програми до появи значення, що вводиться, після чого заповнює buf усіма прочитаними байтами, в кількості не більше buflength Метод повертає фактичне кількість прочитаних байтів або -1 при досягненні кінця потоку

public int read(byte[] buf, int off, int len) throws IOException

Читає дані в байтовий підмасив Метод блокує роботу програми до початку введення, після чого заповнює частина масиву buf, починаючи зі зсуву off, в кількості до len байтів, якщо не зустрінеться кінець масиву buf

public long skip(long count) throws IOException

Пропускає до count байтів у вхідному потоці Кількість пропущених байтів може бути менше count через досягнення кінця потоку Повертає фактичну кількість пропущених байтів

public int available() throws IOException

Повертає кількість байтів, які можуть бути прочитані без блокування роботи програми

public void close() throws IOException

Закриває вхідний потік Метод повинен викликатися для звільнення будь-яких ресурсів (наприклад, файлових дескрипторів), повязаних з потоком Якщо не зробити це, то ресурси будуть вважатися зайнятими, поки складальник сміття не викличе метод finalize даного потоку

Наведена нижче програма підраховує загальну кількість символів і роздільників

(White-space characters) у файлі:

import javaio*

class CountSpace {

public static void main(String[] args)

throws IOException

{

InputStream in

if (argslength == 0)

in = Systemin

else

in = new FileInputStream(args[0])

int ch

int total

int spaces = 0

for (total = 0 (ch = inread()) = -1 total++) {

if (CharacterisSpace((char)ch)

spaces++

}

Systemoutprintln(total + &quot chars, &quot

+ spaces + &quot spaces&quot)

}

}

Програма або бере імя файлу з командного рядка, або читає дані зі стандартного вхідного потоку, Systemin Вхідний потік представлений змінної in Якщо імя файлу не задано, використовується стандартний вхідний потік якщо ж воно зазначено, то створюється обєкт FileInputStream, що є розширенням InputStream

Цикл for підраховує як загальна кількість символів у файлі, так і кількість символів-роздільників для ідентифікації останніх застосовується метод isSpace класу Character Наприкінці відбувається виведення результатів Ось як вони виглядають, якщо програма використовується з файлом, що містить її власний вихідний текст:

434 chars, 109 spaces

Можливо, вам захочеться привласнити значення total за допомогою методу available, однак для потоку Systemin такий варіант не спрацює Метод available повертає кількість байтів, які можуть бути прочитані без блокування Для файлу воно зазвичай являє собою його довжину Якщо ж потік Systemin буде повязаний з клавіатурою, то повертається методом значення може дорівнювати нулю якщо необроблені символи введення відсутні, то наступний виклик read призведе до блокування

Джерело: Арнольд К, Гослінг Д – Мова програмування Java (1997)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*