4-modul · 7-dars: I/O Streams · NIO · Serialization
Daraja: O'rta
I/O Streams · NIO · Serialization. Multithreading va I/O bo‘yicha nazariya, amaliy namuna va mustaqil mashq.
Tushuntirish
## Dars maqsadi I/O Streams · NIO · Serialization tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.
## Nazariya Ma'lumotni manba/maqsad bilan ketma-ket (bayt yoki belgi) o'qish/yozish oqimi.
Fayl va papka yo'lini ifodalovchi hamda ular ustida amallar (mavjudligi, o'chirish, nom) beruvchi class (`java.io.File`).
## Intervyuga tayyorgarlik ### Input/Output Stream nima? Ma'lumotni manba/maqsad bilan ketma-ket (bayt yoki belgi) o'qish/yozish oqimi.
### File class nima? Fayl va papka yo'lini ifodalovchi hamda ular ustida amallar (mavjudligi, o'chirish, nom) beruvchi class (`java.io.File`).
### FileInputStream va FileOutputStream classlarini tushuntiring. Fayldan bayt (binary) ma'lumotni o'qish/yozish uchun stream lar (rasm, video kabi fayllar bilan).
### DataInputStream va DataOutputStream classlarini tushuntiring. Primitiv turlarni (int, double, boolean) platformdan mustaqil binary ko'rinishda o'qish/yozish uchun.
### FileReader va FileWriter nima uchun ishlatiladi? Fayldan belgi (matn/character) ma'lumotni o'qish/yozish uchun.
### BufferedReader va BufferedWriter nima uchun ishlatiladi? Bufer orqali (bir necha belgini birdan) o'qib/yozib, disk murojaatini kamaytirib tezlashtirish uchun; `readLine()` beradi.
### File(Reader/Writer) va Buffered(Reader/Writer) farqi? File — to'g'ridan har belgini o'qiydi (sekin). Buffered — buferga yig'ib o'qiydi (tez), qo'shimcha `readLine` methodi bor.
### NIO nima? New I/O (`java.nio`) — buffer va channel asosli, non-blocking, tezroq I/O modeli.
### NIO nima uchun Java 7 da o'zgartirildi? NIO.2 qo'shildi — `Path`, `Files`, `WatchService` bilan fayl tizimi bilan qulayroq va kuchliroq ishlash uchun.
### Oddiy I/O stream va NIO farqi? I/O — stream asosli, bloklovchi, bir yo'nalishli. NIO — buffer/channel asosli, non-blocking bo'lishi mumkin, ikki yo'nalishli, tezroq.
### Serialization nima? Obyektni bayt oqimiga (saqlash yoki yuborish uchun) aylantirish.
### Deserialization nima? Bayt oqimini qayta obyektga tiklash.
### Externalization nima? Serializatsiyani `Externalizable` orqali qo'lda to'liq boshqarish (`writeExternal`/`readExternal`).
### Externalizable va Serializable interfacelari farqi? Serializable — avtomatik (marker interface). Externalizable — dasturchi qaysi field qanday yozilishini o'zi to'liq belgilaydi (nazorat va tezlik).
### SerialVersionUID nima? Serializable class versiyasini bildiruvchi unikal id; serialize va deserialize class mosligini tekshiradi.
### marker interface nima? Methodi yo'q (bo'sh) interface — class ga belgi beradi (masalan `Serializable`).
### transient nima? Field ni serializatsiyadan chiqarib tashlaydigan keyword (u saqlanmaydi/tiklanmaydi).
### static o'zgaruvchilar serialize bo'ladimi? Yo'q. Static field class ga tegishli (obyektga emas), shuning uchun serialize qilinmaydi.
## Versiya va aniqlik Java misollari Java 17 bazasiga mo‘ljallangan. JDK/JRE paketlash usuli distributivga bog‘liq; JVM bayt-kodni interpretatsiya va JIT orqali bajarishi mumkin. GC uchun aniq bajarilish vaqtiga kafolat yo‘q; finalization resurs yopish usuli emas. Thread stop/suspend/resume kabi eski metodlar amaliy yechim emas. Koddagi import, klass yoki tashqi kutubxona kontekstini tekshiring.
## Manbalar [Moduldagi savollar yo‘nalishi](https://github.com/jlkesh/pdp_online_java_lessons/blob/main/interviewquestions/4-module.md) [Rasmiy qo‘llanma](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/package-summary.html) [Sizning avvalgi savol-javob arxivingiz](https://lightyer.uz/java/interview.html)
Kod quyida o‘quv namunasi sifatida berilgan. To‘liq ilova uchun import, dependency va konfiguratsiya kerak bo‘lishi mumkin. SQLni faqat ajratilgan test bazasida bajaring.
Kod misoli
java.nio.file.Path path = java.nio.file.Path.of("demo.txt");
// Faqat o'zingiz yaratgan test fayl bilan:
// Files.writeString(path, "Salom", StandardCharsets.UTF_8);
// String value = Files.readString(path, StandardCharsets.UTF_8);
System.out.println(path.toAbsolutePath());
Keng tarqalgan xatolar
- Stream ni `close()` qilmaslik yoki `finally` yozmaslik - try-with-resources ishlatilsin.
- Matn faylini kodlashni ko'rsatmasdan o'qish - platformaga qarab natija o'zgaradi.
Mashqlar
- Faylni `Files.readString` va `BufferedReader` bilan o'qib, ikkalasini solishtiring.
- Obyektni serializatsiya qilib faylga yozing va qayta o'qing.
Teglar: modul-04, pdp, nazariya