Sobes.tech
Middle

Java-da Input və Output Stream-lər necə qurulub?

sobes.tech Süni İntellekt

AI-dan cavab

Java-da Input və Output axınları, məlumatların mənbəsini (Input üçün) və qəbul edənini (Output üçün) təmsil edən abstrakt təqdimatdır. Onlar java.io paketinin bir hissəsidir.

Əsas sinflər:

  • InputStream: Baytların oxunması üçün əsas abstrakt sinf.
  • OutputStream: Baytların yazılması üçün əsas abstrakt sinf.
  • Reader: Simvolların oxunması üçün əsas abstrakt sinf.
  • Writer: Simvolların yazılması üçün əsas abstrakt sinf.

Baytlar və simvollar ilə işləmək:

  • Axınlar (InputStream, OutputStream) baytlar ilə işləyir.
  • Readers və Writers baytları simvollara çevirmək və əksinə kodlama (məsələn, UTF-8) istifadə edir.

Əsas anlayışlar:

  1. Dekorator (Wrapper) Pattern: Çox sayda axın sinfi "dekoraor" kimi digər axınları əhatə edir və funksionallıq əlavə edir (məsələn, tamponlama, məlumatların sıxılması, tiplərin çevrilməsi). Məsələn, BufferedInputStream başqa bir InputStream-i əhatə edir.

  2. Sıralı giriş: Axımdakı məlumatlar ardıcıl olaraq oxunur və ya yazılır.

  3. Axınların bağlanması: Axınlar istifadə edildikdən sonra bağlanmalıdır ki, sistem resursları sərbəst buraxılsın (fayl deskriptorları, şəbəkə əlaqələri). Tez-tez try-with-resources istifadə olunur:

    // try-with-resources nümunəsi
    try (InputStream is = new FileInputStream("file.txt")) {
        int data = is.read();
        while (data != -1) {
            // Məlumatların işlənməsi
            data = is.read();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    
  4. Oxuma/yazma metodları:

    • read(): Bir bayt (və ya simvol) oxuyur və ya axırda -1 qaytarır.
    • read(byte[] b): Baytları b massivinə oxuyur. Oxunan baytların sayını və ya -1 qaytarır.
    • read(byte[] b, int off, int len): len qədər bayt oxuyur, off ofseti ilə b massivində.
    • Oxşar write() metodları yazmaq üçün.

Xüsusi axınlar/Readerlər/Writers nümunələri:

  • FileInputStream/FileOutputStream: Fayllarla işləmək üçün.
  • ByteArrayInputStream/ByteArrayOutputStream: Yaddaşda baytlarla işləmək üçün.
  • PipedInputStream/PipedOutputStream: Eyni prosesdə axınlar arasında məlumat mübadiləsi üçün.
  • SocketInputStream/SocketOutputStream: Şəbəkə əlaqələri üçün.
  • BufferedReader/BufferedWriter: Oxuma/yazma əməliyyatlarını tamponlamaq üçün, bu performansı artırır.
  • InputStreamReader/OutputStreamWriter: Bayt axınlarını simvollara çevirmək üçün.

Sinif hierarxiyası:

  • InputStream
    • FileInputStream
    • BufferedInputStream
    • ObjectInputStream (serializasiya üçün)
    • ...
  • OutputStream
    • FileOutputStream
    • BufferedOutputStream
    • ObjectOutputStream (serializasiya üçün)
    • ...
  • Reader
    • FileReader
    • BufferedReader
    • InputStreamReader
    • ...
  • Writer
    • FileWriter
    • BufferedWriter
    • OutputStreamWriter
    • ...

Bayt və simvol axınları arasındakı seçim məlumatların növündən asılıdır: baytlar ikili məlumatlar üçün (şəkillər, icra edilə bilən fayllar), simvollar isə mətn məlumatları üçün.