Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
То есть возможна ситуация, когда в потоке данных (байт) содержится меньше, чем длина массива. Поэтому метол возвращает значение int, указывающее, сколько байт было реально считано. Понятно, что это значение может быть от 0 до величины длины переданного массива.
Если же мы изначально хотим заполнить не весь массив, а только ею часть, то для этих целей используется метод read(), которому, кроме массива byte[], передаются еще два int значения. Первое - это позиция в массиве, с которой следует начать заполнение, второе — количество байт, которое нужно считать. Такой подход, когда для получения данных передается массив и два int числа — offset (смещение) и length (длина), является довольно распространенным и часто встречается не только в пакете java.io.
При вызове методов read() возможно возникновение такой ситуации, когда запрашиваемые данные еще не готовы к считыванию. Например, если мы считываем данные, поступающие из сети, и они еше просто не пришли. В таком случае нельзя сказать, что данных больше нет. но и считать тоже нечего - выполнение останавливается на вызове метода read() и получается "зависание".
Чтобы узнать, сколько байт в потоке готово к считыванию, применяется метод available(). Этот метод возвращает значение типа int, которое показывает, сколько байт в потоке готово к считыванию. При этом не стоит путать количество байт, готовых к считыванию, с тем количеством байт, которые вообще можно будет считать из этого потока. Метод available() возвращает число - количество байт, именно на данный момент готовых к считыванию.
Когда работа с входным потоком данных окончена, его следует закрыть. Для этого вызывается метод close(). Этим вызовом будут освобождены все системные ресурсы, связанные с потоком.
Точно так же, как InputStream - это базовый класс для потоков ввода, класс OutputStream - это базовый класс для потоков вывода.
В классе OutputStream аналогичным образом определяются три метода write() — один принимающий в качестве параметра int. второй -byte[] и третий - byte[], плюс два int-числа. Все эти методы ничего не возвращают (void).
Метод write(int) является абстрактным и должен быть реализован в классах-наследниках. Этот метод принимает в качестве параметра int, но реально записывает в поток только byte — младшие 8 бит в двоичном представлении