Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прога 2012.docx
Скачиваний:
3
Добавлен:
17.09.2019
Размер:
1.45 Mб
Скачать
  1. Понятие потока данных в java. Виды потоков:

Поток данных - перемещение данных от уст-ва в программу и наоборот, независимо от природы устройства. Поток это абстракция, которая или производит, или потребляет информацию. Поток связывается с физическим уст-вом с помощью системы ввода/вывода java.

Существуют: байтовые (двоичные данные, может применяться для передачи латинских символов (сырые данные)), символьные потоки (основан на потоке символов) и потоки строк (элемент-строка символов, основан на потоке символов).

  1. Общая схема записи данных в поток:

создать и открыть поток ( stream )

while (есть данные для записи) {

записать ( write) данные в поток

}

закрыть ( close) поток

Пример:

FileInputStreamfi=null;

FileOutputStreamfo=null;

try{

fi=new FileInputStream("f-out.byt");

fo=new FileOutputStream("f-out2.byt");

while((d=fi.read())!=-1){b=(byte)d;

System.out.printf("%02x\n",b);

b=((byte)(b^0x54));

System.out.printf("%02x\n",b);

fo.write(b);

}

}

catch (IOException e){System.out.println("error");}

finally{if(fo!=null){System.out.println(" fo was opened");

fo.close();а

  1. Общая схема чтения данных из потока:

создать и открыть поток ( stream )

while (в потоке есть данные) {

прочитать (read) данные из потока

}

закрыть( close) поток

FileInputStream fi=null;

FileOutputStreamfo=null;

try{

fi=new FileInputStream("f-out.byt");

fo=new FileOutputStream("f-out2.byt");

while((d=fi.read())!=-1){b=(byte)d;

System.out.printf("%02x\n",b);

b=((byte)(b^0x54));

System.out.printf("%02x\n",b);

fo.write(b);

}

}

catch (IOException e){System.out.println("error");}

finally{if(fo!=null){System.out.println(" fo was opened");

fo.close();а

  1. Байтовый поток :свойства, связь потока с файлом, чтение, запись закрытие:

Байтовые потоки предоставляют удобные средства для обработки ввода и вывода байтов. Определяются в двух иерархиях классов. Наверху этой иерархии – 2 абстрактных класса: InputStream и OutputStream. Абстрактных классы InputStream и OutputStream определяют несколько ключевых методов, которые реализуются другими поточными классами. Два наиболее важных – read() и write(), которые соответсвенно, читают и записывают байты данных.

Методы абстрактного класса – потока байтовInputStream

close() закрывает поток и освобождает ресурсы, ранее полученные для потока.

mark(intreadlimit) отмечает текущую позицию в потоке, которую можно будет использовать до тех пор, пока из потока не будет прочитано readlimit байтов.

markSupported() проверяет, допустимы ли методы mark и reset. Возвращает true/false.

read() читает очередной байт и возвращает его как правый байт int, или -1, если уже нет доступных байтов.

read(byte[] b) читает порцию байтов, заполняя массив b. Возвращает количество реально прочтенных байтов, если b.length==0, ничего не читает и возвращает 0, если нет доступных байтов, возвращает -1.

read(byte[] b, intoff, intlen) читает len байтов в массив b со смещением от начала массива off. Возвращает количество реально прочтенных байтов. Если len==0, ничего не читает и возвращает 0, если нет доступных байтов, возвращает -1.

reset() перемещается по потоку в обратном направлении до отметки

skip(long n) пытается пропустить во входном потоке n байтов без чтения.

Методы абстрактного класса – потока байтов OutputStream.

Все методы этого класса имеют тип void и создают исключение IOException в случае ошибки.

write(int b) пишет правый байт из int в поток. Левые байты int не используются.

write(byte b[]) записывает в выходной поток массив байтов b.

write(byte b[], intoff, intlen) записывает в поток len байтов из b, начиная с элемента b[off].

flush() завершает операцию вывода, сохраняя данные из внутреннего буфера.

close() закрывает выходной поток.

FileInputStream – поток для ввода байтов, связанный с

файлом

FileOutputStream – поток для вывода байтов, связанный

сфайлом

FileInputStream fi=null;

FileOutputStreamfo=null;

fi=new FileInputStream("f-out.byt");

fo=new FileOutputStream("f-out2.byt");