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

Mashqlar

Teglar: modul-04, pdp, nazariya

Interaktiv ko'rinish (viktorina, izohlar, tarix)