Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
Классы ByteArraylnputStream и ByteArrayOutputStream
Самый естественный и простой источник, откуда можно считывать байты, - это, конечно, массив байт. Класс ByteArraylnputStream представляет поток, считывающий данные из массива байт. Этот класс имеет конструктор, которому в качестве параметра передается массив byte[]. Соответственно, при вызове методов read() возвращаемые данные будут браться именно из этого массива. Например:
byte[] bytes = {1,-1,0};
ByteArraylnputStream in = new ByteArraylnputStream(bytes); int readedlnt = in.read(); // readedlnt=1 System.out.println("first element read is: " +readedlnt); readedlnt = in.read();
// readedlnt=255. Однако (byte)readedlnt даст значение -1 System.out.println("second element read is: " +readedlnt); readedlnt = in.read(); // readedlnt=0 System.out.println("third element read is: " +readedlnt);
Если запустить такую программу, на экране отобразится следующее:
first element read is: 1 second element read is: 255 third element read is: 0
При вызове метода read() данные считывались из массива bytes, переданного в конструктор ByteArraylnputStream. Обратите внимание, в данном примере второе считанное значение равно 255, а не -1, как можно было бы ожидать. Чтобы понять, почему это произошло, нужно вспомнить, что метод read считывает byte, но возвращает значение int, полученное добавлением необходимого числа нулей (в двоичном представлении). Байт, равный -1, в двоичном представлении имеет вид 11111111 и, соответственно, число типа int, получаемое приставкой 24-х нулей, равно 255 (в десятичной системе). Однако если явно привести его к byte, получим исходное значение.
Аналогично, для записи байт в массив применяется класс ByteArrayOutputStream. Этот класс использует внутри себя объект byte[], куда записывает данные, передаваемые при вызове методов write(). Чтобы получить записанные в массив данные, вызывается метод toByteArray(). Пример:
ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(IO);
out.write(11 );
byte[] bytes = out.toByteArrayO;
В этом примере в результате массив bytes будет состоять из двух элементов: 10 и 11.
Использовать классы ByteArraylnputStream и ByteArrayOutputStream может быть очень удобно, когда нужно проверить, что именно записывается в выходной поток