Ako sú v Jave navrhnuté Input a Output Streamy?
sobes.tech AI
Odpoveď od AI
Vstupné a výstupné prúdy v Jave predstavujú abstraktné reprezentácie zdroja (pre vstup) a príjemcu (pre výstup) dát. Sú súčasťou balíka java.io.
Hlavné triedy:
InputStream: Základná abstraktná trieda na čítanie bajtov.OutputStream: Základná abstraktná trieda na zápis bajtov.Reader: Základná abstraktná trieda na čítanie znakov.Writer: Základná abstraktná trieda na zápis znakov.
Práca s bajtami a znakmi:
- Prúdy (
InputStream,OutputStream) pracujú s bajtmi. - Readers a Writers pracujú so znakmi, používajúc kódovanie (napríklad UTF-8) na prevod bajtov na znaky a späť.
Kľúčové koncepty:
-
Dekorátor (Wrapper) vzor: Mnohé triedy prúdov sú "dekorátory", ktoré obalujú iné prúdy na pridanie funkčnosti (napríklad buffering, kompresia dát, prevod typov). Napríklad,
BufferedInputStreamobalí inýInputStream. -
Sekvenciálny prístup: Dáta v prúde sa čítajú alebo zapisujú sekvenčne.
-
Zatváranie prúdov: Je dôležité zatvárať prúdy po použití na uvoľnenie systémových zdrojov (súborové deskriptory, sieťové spojenia). Často sa používa
try-with-resources:// Príklad použitia try-with-resources try (InputStream is = new FileInputStream("file.txt")) { int data = is.read(); while (data != -1) { // Spracovanie dát data = is.read(); } } catch (IOException e) { e.printStackTrace(); } -
Metódy čítania/zápisu:
read(): Číta jeden bajt (alebo znak) alebo vracia -1 na konci prúdu.read(byte[] b): Číta bajty do poľab. Vráti počet prečítaných bajtov alebo -1.read(byte[] b, int off, int len): Číta dolenbajtov s posunomoffv polib.- Podobné metódy
write()na zápis.
Príklady konkrétnych implementácií prúdov/Readerov/Writers:
FileInputStream/FileOutputStream: Na prácu so súbormi.ByteArrayInputStream/ByteArrayOutputStream: Na prácu s bajtmi v pamäti.PipedInputStream/PipedOutputStream: Na výmenu dát medzi prúdmi v jednom procese.SocketInputStream/SocketOutputStream: Na sieťové spojenia.BufferedReader/BufferedWriter: Na bufferovanie čítania/zápisu, čo zlepšuje výkon.InputStreamReader/OutputStreamWriter: Na prevod bajtových prúdov na znaky a späť.
Hierarchia tried:
InputStreamFileInputStreamBufferedInputStreamObjectInputStream(pre serializáciu)- ...
OutputStreamFileOutputStreamBufferedOutputStreamObjectOutputStream(pre serializáciu)- ...
ReaderFileReaderBufferedReaderInputStreamReader- ...
WriterFileWriterBufferedWriterOutputStreamWriter- ...
Voľba medzi bajtovými a znakmi prúdmi závisí od typu dát: bajty pre binárne dáta (obrázky, spustiteľné súbory), znaky pre textové dáta.