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:
-
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,
BufferedInputStreambaşqa birInputStream-i əhatə edir. -
Sıralı giriş: Axımdakı məlumatlar ardıcıl olaraq oxunur və ya yazılır.
-
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-resourcesistifadə 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(); } -
Oxuma/yazma metodları:
read(): Bir bayt (və ya simvol) oxuyur və ya axırda -1 qaytarır.read(byte[] b): Baytlarıbmassivinə oxuyur. Oxunan baytların sayını və ya -1 qaytarır.read(byte[] b, int off, int len):lenqədər bayt oxuyur,offofseti iləbmassivində.- 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ı:
InputStreamFileInputStreamBufferedInputStreamObjectInputStream(serializasiya üçün)- ...
OutputStreamFileOutputStreamBufferedOutputStreamObjectOutputStream(serializasiya üçün)- ...
ReaderFileReaderBufferedReaderInputStreamReader- ...
WriterFileWriterBufferedWriterOutputStreamWriter- ...
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.