1. Класс InputStreamReader
Боз як хусусияти ҷолиби потокҳо ин имконияти пайваст кардани чандин потокҳо дар занҷираҳо. Поток метавонад хондани маълумот на танҳо аз манбаъи маълумот, ки онро нигоҳ медорад, балки аз дигар поток.
Ин як механизми хеле тавоно дар Java аст, ки ба шумо имкон медиҳад, ки сенарияҳои мураккаби хондани маълумотро созед, пайвастани як поток бо дигар потокҳо. Ин схема тақрибан чунин менамояд:
Вақте ки барнома маълумотро аз потоки маълумот мехонад, он дар навбати худ онҳоро аз манбаъи худ мехонад: масалан, дигар потоки маълумот ё файл.
Ҳар поток на танҳо хондани ва гирифтани маълумотро иҷро мекунад, балки инчунин метавонад онҳоро тағйир диҳад ё амалиёти гуногуни дигар иҷро кунад. Мисоли хуби чунин «потоки миёнарави» маълумот ин класс InputStreamReader
мебошад.
Мо аллакай классро медонем, ки онро FileReader
меноманд, ва он як Reader
аст, ки маълумотро аз файл мехонад. Ва аз куҷо класс InputStreamReader
маълумот мехонад? Рост: аз потоки InputStream
.
Барои сохтани объекте аз намуд InputStreamReader
, ба он лозим аст, ки объекти намуди InputStream
, ё класи меросигари он гузаронида шавад. Мисол:
String src = "c:\\projects\\log.txt";
FileInputStream input = new FileInputStream(src);
InputStreamReader reader = new InputStreamReader(input);
Класси InputStreamReader
ҳамаи методҳое дорад, ки класс Reader
дорад, ва онҳо ба ҳамон тавр кор мекунанд.
Фарқи асосии классҳои InputStreamReader
ва, масалан, FileReader
дар он аст, ки онҳо аз куҷо маълумот мехонанд. FileReader
маълумотро аз файл мехонад (аз ин рӯ ӯро FileReader
меноманд), ва InputStreamReader
маълумотро аз потоки InputStream
мехонад.
Вақте шумо як символро аз объекти FileReader
бо истифода аз методи read()
мехонед, он дар навбати худ аз файл дар диск ду байт мехонад ва онро ба шумо ҳамчун char
бармегардонад.
Вақте шумо як символро аз объекти InputStreamReader
бо истифода аз методи read()
мехонед, он дар навбати худ ду байтро аз объекти FileInputStream
, ки ба он гузаронида шудааст, мехонад, ки он дар навбати худ маълумотро аз файл мехонад. Масалан, як занҷираи даъватҳо методи read()
ба вуҷуд меояд.
2. Класс BufferedReader
Як класси дигаре низ ҳаст, ки эҳтимолан шумо аксарияти вақт истифода мекунед — BufferedReader
. Ин ҳузури «потоки миёнаравӣ», ки маълумотро аз дигар поток мехонад.
Класси BufferedReader
, чунон ки аз номи он бармеояд, як меросигари Reader
мебошад ва имкон медиҳад, ки символҳоро хонед. Аммо, ин ҷо чизи ҷолиб — дар роли манбаи маълумот ба он низ лозим аст, ки поток, ки аз он метавонед символҳо хонед – поток-меросигар аз класс Reader
.
Мақсад чӣ аст? Ба фарқ аз InputStreamReader
, класс BufferedReader
байтҳоро ба символҳо табдил намекунад: у умуман ҳеҷ чизро табдил намекунад. Ба ҷои ин, он данные буферизует.
Вақте барнома аз объекти BufferedReader
як символ мехонад, он аз потоки манбаи худ дарҳол як маҷмӯи бузурги символҳоро мехонад. Ва онҳоро дар дохили худ нигоҳ медорад.
Ҳангоми хондани символи навбатӣ аз объекти BufferedReader
, он танҳо символи навбатиро аз массиви дохилии буфери худ мегирад ва медиҳад, дар ҳоле ки ба потоки манбаи маълумот муроҷиат намекунад. Ва танҳо вақте ки ҳамаи символҳо дар буфер тамом мешаванд, он боз маҷмӯи бузурги символҳоро мехонад.
Ҳамчунин дар класс BufferedReader
як методи бисёр муфид мавҷуд аст — String readLine()
, ки имкон медиҳад маълумотро аз потоки манбаи дарҳол хаттӣ хонед. Бо ёрии ин метод шумо метавонед, масалан, як файли муайянро хонед ва мазмуни онро ба экран хаттӣ намоиш диҳед. Мисол:
Махсусан ин кодро дар формати мухтасар сабт кардем, то шумо бубинед, ки ин чӣ гуна метавонад мувофиқ бошед. Метавонед ин кодро ва каме муфассалтар нависед.
|
Создаем объект FileReader , манбаи маълумот — файл.Создаем объект BufferedReader , манбаи маълумот — объект FileReader ;дар ҳоле ки дар reader ҳануз маълумотҳо мавҷуд ҳастХатти якеро хонед Хаттро ба экран нишон диҳед |
Агар шумо чандин потокҳоро дар занҷира пайваст карда бошед, методи close()
танҳо як бор ба ягон аз онҳо даъват кунед: он онро ба манбаи маълумоти худ даъват мекунад ва ғ., то ки ба потоки ниҳоӣ бо маълумотҳо мерасанд.
3. Хондан аз консоль
Ва боз як факти ҷолиб: класс Scanner
-- ҳеҷ чиз ҷуз потоки миёнаравии воридотӣ вуҷуд надорад, ки онҳоро аз потоки System.in
мехонад -- низ потоки маълумот мебошад.
Ин ҷо ду роҳ барои хондани хат аз консоль:
Класс Scanner | Классҳо BufferedReader ва InputStreamReader |
---|---|
|
|
Наш маъруф System.in
-- ҳеҷ чиз ҷуз як тағйирёбандаи статикӣ in
классии System
нест. Навъаш InputStream
аст, ва номи он in
.
Пас, тақрибан аз оғозн омӯзиши Java дар JavaRush, шумо бо потокҳои маълумот кор мекунед ва аз онҳо занҷираҳо месозед. Танҳо ҳоло шумо инро бо шуур хоҳед кард.
GO TO FULL VERSION