Hogyan épülnek fel az Input és Output Stream-ek Java-ban?
sobes.tech MI
Válasz az MI-től
A Java bemeneti és kimeneti áramlatai absztrakt reprezentációk az adatok forrására (bemenet esetén) és fogadójára (kimenet esetén). A java.io csomag részei.
Főbb osztályok:
InputStream: Alapvető absztrakt osztály bájtok olvasására.OutputStream: Alapvető absztrakt osztály bájtok írására.Reader: Alapvető absztrakt osztály karakterek olvasására.Writer: Alapvető absztrakt osztály karakterek írására.
Bájtokkal és karakterekkel való munka:
- Az áramlások (
InputStream,OutputStream) bájtokkal dolgoznak. - A Reader és Writer osztályok karakterekkel dolgoznak, kódolást (pl. UTF-8) használva a bájtok karakterekké való átalakítására és fordítva.
Kulcsfogalmak:
-
Dekorátor (Wrapper) minta: Sok áramlás osztály "dekoraor", amelyek más áramlásokat vesznek körül funkcionalitás hozzáadásához (pl. pufferelés, adat tömörítés, típusátalakítás). Például, a
BufferedInputStreamegy másikInputStream-et vesz körül. -
Szekvenciális hozzáférés: Az adatok az áramlásban egymás után olvashatók vagy írhatók.
-
Áramlások zárása: Fontos, hogy az áramlásokat lezárjuk használat után a rendszer erőforrásainak felszabadítása érdekében (fájl leírók, hálózati kapcsolatok). Gyakran használják a
try-with-resources-t:// Példa a try-with-resources használatára try (InputStream is = new FileInputStream("file.txt")) { int data = is.read(); while (data != -1) { // Adatok feldolgozása data = is.read(); } } catch (IOException e) { e.printStackTrace(); } -
Olvasási/írási módszerek:
read(): Egy byte-ot (vagy karaktert) olvas, vagy -1-et ad vissza a végén.read(byte[] b): Byte-okat olvas abtömbbe. Visszaadja az olvasott byte-ok számát vagy -1-et.read(byte[] b, int off, int len): Legfeljebblenbyte-ot olvas abtömbbe aoffeltolással.- Hasonló
write()módszerek az íráshoz.
Konkrét példák áramlások/Reader-ek/Writer-ek implementációjára:
FileInputStream/FileOutputStream: Fájlok kezelésére.ByteArrayInputStream/ByteArrayOutputStream: Byte-ok kezelésére memóriában.PipedInputStream/PipedOutputStream: Adatok cseréje folyamaton belüli áramlások között.SocketInputStream/SocketOutputStream: Hálózati kapcsolatokhoz.BufferedReader/BufferedWriter: Bufferelés olvasáshoz/íráshoz, ami javítja a teljesítményt.InputStreamReader/OutputStreamWriter: Byte-áramok karakterekké való átalakítására és fordítva.
Osztályhierarchia:
InputStreamFileInputStreamBufferedInputStreamObjectInputStream(sorozatba rendezéshez)- ...
OutputStreamFileOutputStreamBufferedOutputStreamObjectOutputStream(sorozatba rendezéshez)- ...
ReaderFileReaderBufferedReaderInputStreamReader- ...
WriterFileWriterBufferedWriterOutputStreamWriter- ...
A választás bájt- vagy karakteralapú áramlások között a adat típusától függ: bájtokat bináris adatokhoz (képek, futtatható fájlok), karaktereket szöveges adatokhoz.