Kuidas on Java-s üles ehitatud Input ja Output Streamid?
sobes.tech AI
Vastus AI-lt
Input ja Output streamid Java's on abstrakts kujutis andmeallikast (Input jaoks) ja vastuvõtjast (Output jaoks) andmete jaoks. Nad kuuluvad java.io paketti.
Peamised klassid:
InputStream: Põhiklass baitide lugemiseks.OutputStream: Põhiklass baitide kirjutamiseks.Reader: Põhiklass märkide lugemiseks.Writer: Põhiklass märkide kirjutamiseks.
Töö baitide ja märkidega:
- Struumid (
InputStream,OutputStream) töötavad baitidega. - Readers ja Writers töötavad märkidega, kasutades kodeeringut (näiteks UTF-8), et teisendada baitid märkideks ja tagasi.
Põhimõisted:
-
Dekoratiivne (Wrapper) muster: Paljud struumiklassid on "dekoratsioonid", mis ümbritsevad teisi struumisid, et lisada funktsionaalsust (näiteks buferimine, andmete tihendamine, tüüpide teisendamine). Näiteks
BufferedInputStreamümbritseb teistInputStream. -
Järjepidev juurdepääs: Andmed struumis loetakse või kirjutatakse järjepidevalt.
-
Struumide sulgemine: Oluline on struumid sulgeda pärast kasutamist, et vabastada süsteemi ressursid (faili deskriptorid, võrguliidesed). Sageli kasutatakse
try-with-resources:// Näide try-with-resources kasutamisest try (InputStream is = new FileInputStream("file.txt")) { int data = is.read(); while (data != -1) { // Andmete töötlemine data = is.read(); } } catch (IOException e) { e.printStackTrace(); } -
Lugemis-/kirjutusmeetodid:
read(): Loeb ühe baiti (või märgi) või tagastab -1 lõpus.read(byte[] b): Loeb baitid massiivib. Tagastab loetud baitide arvu või -1.read(byte[] b, int off, int len): Loeb kunilenbaiti, alustades indeksistoffmassiivisb.- Sarnased
write()meetodid kirjutamiseks.
Näited konkreetsetest struumidest/Readeritest/Writersitest:
FileInputStream/FileOutputStream: Failidega töötamiseks.ByteArrayInputStream/ByteArrayOutputStream: Baitidega töötamiseks mälus.PipedInputStream/PipedOutputStream: Andmete vahetamiseks struumide vahel samas protsessis.SocketInputStream/SocketOutputStream: Võrguühenduste jaoks.BufferedReader/BufferedWriter: Buferiseeritud lugemis- ja kirjutamiskiiruse parandamiseks.InputStreamReader/OutputStreamWriter: Baitide voogude teisendamiseks märkideks ja tagasi.
Klasside hierarhia:
InputStreamFileInputStreamBufferedInputStreamObjectInputStream(seriaalimiseks)- ...
OutputStreamFileOutputStreamBufferedOutputStreamObjectOutputStream(seriaalimiseks)- ...
ReaderFileReaderBufferedReaderInputStreamReader- ...
WriterFileWriterBufferedWriterOutputStreamWriter- ...
Straumide baitide ja märkide valik sõltub andmetüübist: baitide jaoks sobivad binaarsed andmed (pildid, täidetavad failid), märkide jaoks tekstilised andmed.