Буферізірованний потоки

Отже, зараз ми зчитуємо і записуємо файли побайтно Це означає, що для читання файлу довжиною в 1000 байт, програма ByteReader повинна буде звернутися до диску 1000 разів Але робота з даними на диску відбувається значно повільніше, ніж в оперативній памяті Для мінімізації кількості звернень до диску, Java надає так звані буфери, щось на зразок Резервуарів для даних. Клас BufferedInputStream дозволяє швидко заповнити буфер в памяті даними з FileInputStream Буферізірованний потік зчитує велику порцію байтів з файлу в память за раз, після чого метод read () отримує окремі байти з буфера набагато швидше

У програмі можна зєднувати потоки, так само, як водопровідник зєднує труби Давайте трохи змінимо приклад, який зчитує файл Спочатку, дані з потоку FileInputStream надходитимуть в BufferedInputStream, а потім – методу read (): FileInputStream myFile = null BufferedInputStream buff =null try {

myFile = new  FileInputStream(&quotabcdat&quot)

/ / Зєднуємо потоки FileInputStream і BufferedInputStream

buff = new BufferedInputStream(myFile)

while (true) {

int byteValue = buffread() Systemoutprint(byteValue + &quot &quot)

if (byteValue  == -1)

break

}

} catch (IOException e) {

eprintStackTrace()

}finally{

try{

buffclose()

myFileclose()

} catch(IOException e1){

e1printStackTrace()

}

}

А якого обсягу такої буфер Це залежить від версії JVM, наприклад 600 байт, але його можна встановити і вручну Наприклад, для установки розміру буфера в 5000 байтів, використовуйте конструктор з двома аргументами:

BufferedInputStream buff = new BufferedInputStream(myFile, 5000)

не змінюють спосіб читання, а просто прискорюють його

BufferedOutputStream діє аналогічно, але тільки він не читає, а пише в буфер, використовуючи клас FileOutputStreamint somedata[]= {56,230,123,43,11,37} FileOutputStream myFile = null

BufferedOutputStream buff =null

try {

myFile = new  FileOutputStream(&quotabcdat&quot)

/ / Зєднуємо потоки

buff = new BufferedOutputStream(myFile)

for (int i = 0 i &ltsomedatalength i++){

buffwrite(somedata[i])

}

} catch (IOException e) {

eprintStackTrace()

}finally{

try{

buffflush() buffclose() myFileclose()

} catch(IOException e1){

e1printStackTrace()

}

}

Щоб бути впевненим, що всі байти з буфера були передані у файловий потік, після закінчення

Джерело: Java Programming for Kids, Parents and Grandparents by Yakov Fain

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


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

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

Ваш отзыв

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

*

*