1. OutputStream sinfi
Kirish oqimlari bilan endi tanishdik. Endi chiqish oqimlari haqida gaplashamiz.
OutputStream sinfi barcha baytli chiqishni qo'llab-quvvatlaydigan sinflar uchun ota-sinfdir. Bu hech nimani qilmaydigan abstrakt sinf: bu uchun turmush sharoitiga mos keluvchi merosxoʻr sinflari bor.
Murakkab eshitilyapti. Oddiyroq qilib aytganda, bu sinf baytlar bilan ishlaydi, masalan, belgilar yoki boshqa ma'lumot turlari bilan emas. Uning abstrakt ekanligi shuni anglatadiki, biz odatda uni emas, balki merosxoʻr sinflaridan birini ishlatamiz. Masalan, FileOutputStream va unga oʻxshashlar.
Ammo OutputStream sinfiga qaytamiz. Bu sinfning barcha merosxoʻr sinflari amalga oshirishi kerak bo'lgan metodlari bor. Mana asosiylari:
| Metodlar | Tavsif |
|---|---|
|
Bir baytni (int emas) oqimga yozadi. |
|
Baytlar massivini oqimga yozadi |
|
Baytlar massivining bo'laklarini oqimga yozadi |
|
Buferda saqlangan barcha ma'lumotlarni oqimga yozadi |
|
Oqimni yopadi |
InputStream merosxoʻr sinfidan obyekt yaratishda odatda InputStream ma'lumotlarni o'qiydigan manba-obyektni ko'rsatadi. OutputStream merosxoʻr sinfidan obyekt yaratishda ham odatda ma'lumotlarni yozadigan maqsad-obyekt yoki maqsadli oqimni ko'rsatadi.
Qisqa qilib, OutputStream sinfining barcha metodlarini ko'rib chiqamiz:
write(int b) metodi
Bu metod chiqish oqimiga bir baytni (int emas) yozadi. Uzatilgan qiymat bayt turiga o'tkaziladi, uchta bosh bayt tashlab yuboriladi.
write(byte[] buffer) metodi
Chiqish oqimiga berilgan baytlar massivini yozadi. Boshqa hech narsa.
write(byte[] buffer, int offset, int length) metodi
Chiqish oqimiga berilgan baytlar massivining bir qismini yozadi. offset o'zgaruvchisi massivning birinchi elementining raqamini belgilaydi, length — yozilayotgan fragmentning uzunligi.
flush() metodi
flush() metodi manzil oqimiga keshlangan ma'lumotlarni majburiy yozish uchun ishlatiladi. Bu buferlashni va/yoki obyekt oqimlarini zanjirda ishlatishda dolzarbdir.
close() metodi
Maqsadli objеktga barcha yozilmagan ma'lumotlarni yozadi. Agar siz try-with-resources ishlatayotgan bo'lsangiz, close() metodini chaqirmasangiz ham bo'ladi.
Misol — faylni nusxalash:
| Kod | Izoh |
|---|---|
|
InputStream fayldan o'qish uchunOutputStream faylga yozish uchunBiz ma'lumotlarni o'qiydigan bufer Oqimda ma'lumotlar bor ekan Ma'lumotlarni buferga o'qib olamiz Ma'lumotlarni birinchi oqimdan ikkinchi oqimga yozamiz |
2. Writer sinfi
Writer sinfi OutputStream sinfining to'liq ekvivalenti, faqat bitta farqi bilan: u baytlar o'rniga belgilar, char, bilan ishlaydi.
Bu abstrakt sinf: Writer sinfining ob'ektini yaratib bo'lmaydi. Uning asosiy maqsadi - yuzlab merosxoʻr sinflar uchun yagona ota-sinf bo'lish va ular uchun belgilar oqimlari bilan ishlash uchun umumiy metodlar belgilashdir.
Writer sinfining metodlari (va uning barcha merosxoʻr sinflari):
| Metodlar | Tavsif |
|---|---|
|
Bir belgi (int emas) oqimga yozadi. |
|
Belgilar massivini oqimga yozadi |
|
Belgilar massivining bir qismini oqimga yozadi |
|
Qatorni oqimga yozadi |
|
Qatorning bir qismini oqimga yozadi |
|
Buferda saqlangan barcha ma'lumotlarni oqimga yozadi |
|
Oqimni yopadi |
Metodlar OutputStream sinfining metodlariga juda o'xshaydi, faqat baytlar o'rniga belgilar bilan ishlaydi.
Metodlarning qisqacha tavsifi:
write(int b) metodi
Bu metod chiqish oqimiga bir belgi char (int emas) yozadi. Uzatilgan qiymat char turiga o'tkaziladi, ikkita bosh bayt tashlab yuboriladi.
write(char[] buffer) metodi
Chiqish oqimiga berilgan belgilar massivini yozadi.
write(char[] buffer, int offset, int length) metodi
Chiqish oqimiga berilgan belgilar massivining bir qismini yozadi. offset o'zgaruvchisi massivning birinchi elementining raqamini belgilaydi, length — yozilayotgan fragmentning uzunligi.
write(String str) metodi
Chiqish oqimiga berilgan qatorni yozadi.
write(String str, int offset, int length) metodi
Chiqish oqimiga berilgan qatorning bir qismini yozadi: qator belgilar massiviga aylantiriladi. offset o'zgaruvchisi massivning birinchi elementining raqamini belgilaydi, length — yozilayotgan fragmentning uzunligi.
flush() metodi
flush() metodi maqsadli oqimga keshlangan ma'lumotlarni majburiy yozish uchun ishlatiladi. Bu buferlashni va/yoki obyekt oqimlarini zanjirda ishlatishda dolzarbdir.
close() metodi
Maqsadli objеktga barcha yozilmagan ma'lumotlarni yozadi. Agar siz try-with-resources ishlatayotgan bo'lsangiz, close() metodini chaqirmasangiz ham bo'ladi.
Matnli faylni nusxalash dasturi misoli:
| Kod | Izoh |
|---|---|
|
Reader fayldan o'qish uchunWriter faylga yozish uchunBiz ma'lumotlarni o'qiydigan bufer Oqimda ma'lumotlar bor ekan Ma'lumotlarni buferga o'qib olamiz Ma'lumotlarni birinchi oqimdan ikkinchi oqimga yozamiz |
StringWriter sinfi
Writer sinfining yana bir qiziqarli merosxoʻri StringWriter hisoblanadi. Unda o‘zgaruvchan qator — StringBuffer obyekti mavjud. Har safar siz StringWriter obyektiga nimadir “yozsangiz”, matn ichki buferga qo‘shiladi.
Misol:
| Kod | Izoh |
|---|---|
|
Maqsadli belgilar oqimi StringWriter yaratilyaptiMatn StringWriter ichidagi buferga yozilyaptiMatn StringWriter ichidagi buferga yozilyaptiObyektning mazmunini qator holatiga o'zgartiryapmiz |
Bu holatda StringWriter sinfi aslida StringBuffer sinfiga obertka, lekin StringWriter sinfi Writer oqimining merosxoʻri va u oqimlar obyektlari zanjirlarida ishlatilishi mumkin. Bu amaliyotda juda foydali xususiyat.
GO TO FULL VERSION