Ինչպես են կառուցված Input և Output հոսքերը Java-ում?
sobes.tech AI
Պատասխան AI-ից
Ներմուծման և արտածման հոսքերը Java-ում ներկայացնում են տվյալների աղբյուրի (ներմուծման համար) և ստացողի (արտածման համար) աբստրակտ ներկայացումներ։ Նրանք մաս են կազմում java.io փաթեթի:
Հիմնական դասերը՝
InputStream: Բազային աբստրակտ դաս՝ բայթների ընթերցման համար։OutputStream: Բազային աբստրակտ դաս՝ բայթների գրելու համար։Reader: Բազային աբստրակտ դաս՝ նշանների ընթերցման համար։Writer: Բազային աբստրակտ դաս՝ նշանների գրելու համար։
Աշխատանք բայթների և նշանների հետ՝
- Հոսքերը (
InputStream,OutputStream) աշխատում են բայթների հետ։ - Readers և Writers աշխատում են նշանների հետ՝ օգտագործելով կոդավորումը (օրինակ՝ UTF-8)՝ բայթները նշանների և հակառակը փոխելու համար։
Հիմնական հասկացություններ՝
-
Զարդարիչ (Wrapper) դիզայնի օրինակ: Շատ հոսքեր դասեր են, որոնք "զարդարում" են այլ հոսքեր՝ ավելացնելու ֆունկցիոնալություն (օրինակ՝ բուֆերավորում, տվյալների սեղմում, տիպերի փոխակերպում)։ Օրինակ՝
BufferedInputStream-ը զարդարում է այլInputStream։ -
Կանոնավոր մուտք: Տվյալները հոսքում ընթերցվում կամ գրանցվում են հերթականությամբ։
-
Հոսքերի փակումը: Կարևոր է, որ հոսքերը փակվեն օգտագործումից հետո՝ համակարգային ռեսուրսները ազատելու համար (ֆայլային դեսկրիպտորներ, ցանցային կապեր)։ Սովորաբար օգտագործվում է
try-with-resources:// Օրինակ՝ try-with-resources օգտագործելու try (InputStream is = new FileInputStream("file.txt")) { int data = is.read(); while (data != -1) { // Տվյալների մշակումը data = is.read(); } } catch (IOException e) { e.printStackTrace(); } -
Կարդալու/գրելու մեթոդներ՝
read(): Կարդում է մեկ բայթ կամ նշան, կամ վերադարձնում -1՝ վերջում։read(byte[] b): Կարդում է բայթեր՝bզանգվածում։ Վերադարձնում է ընթերցված բայթերի քանակը կամ -1։read(byte[] b, int off, int len): Կարդում է մինչևlenբայթ՝offտեղաշարժով՝bզանգվածում։- Նույնպես՝
write()մեթոդներ՝ գրելու համար։
Կատարյալ օրինակներ հոսքերի/Readers/Writers կոնկրետ իրականացման համար՝
FileInputStream/FileOutputStream: Ֆայլերի հետ աշխատելու համար։ByteArrayInputStream/ByteArrayOutputStream: Բայթների հետ աշխատելու համար հիշողության մեջ։PipedInputStream/PipedOutputStream: Տվյալների փոխանակում մեկ գործընթացի մեջ՝ հոսքերի միջև։SocketInputStream/SocketOutputStream: Նետային կապերի համար։BufferedReader/BufferedWriter: Բուֆերային ընթերցում/գրելու համար՝ կատարողականությունը բարելավելու համար։InputStreamReader/OutputStreamWriter: Բայթային հոսքերը նշանների փոխարկման համար։
Դասերի հիերարխիա՝
InputStreamFileInputStreamBufferedInputStreamObjectInputStream(սերիալիզացիայի համար)- ...
OutputStreamFileOutputStreamBufferedOutputStreamObjectOutputStream(սերիալիզացիայի համար)- ...
ReaderFileReaderBufferedReaderInputStreamReader- ...
WriterFileWriterBufferedWriterOutputStreamWriter- ...
Ընտրությունը՝ բայթային կամ նշանային հոսքերի միջև՝ կախված տվյալների տեսակից՝ բայթային՝ բինար տվյալների համար (նկարներ, գործարկվող ֆայլեր), նշանային՝ տեքստային տվյալների համար։