1. კლასი OutputStream
შეყვანის ნაკადებზე უკვე ვისაუბრე. ახლა კი დროა გამოტანის ნაკადებზე ვისაუბროთ.
კლასი OutputStream
არის მშობელი კლასი ყველა იმ კლასისთვის, რომელიც ბაიტზე გამოტანას ემსახურება. ეს არის აბსტრაქტული კლასი, რომელიც თვითონ არაფერს აკეთებს: იმისთვის აქვს შვილობილი კლასები, რომლებსაც სხვადასხვა სიტუაციებისთვის გამოიყენება.
რთულად ჟღერს. თუ მარტივად ვიტყვით, ეს კლასი ოპერირებს ბაიტებით და არა, მაგალითად, სიმბოლოებით ან სხვა მონაცემთა ტიპებით. ხოლო ის, რომ აბსტრაქტულია, ნიშნავს, რომ ჩვეულებრივ ვიყენებთ არა მას, არამედ მის შვილობილ რომელიმე კლასს. მაგალითად, FileOutputStream
და მის მსგავსებს.
მაგრამ დავუბრუნდეთ კლასს OutputStream
. ამ კლასს აქვს მეთოდები, რომლებიც ყველა მისი შვილობილი კლასი უნდა განახორციელოს. აი ძირითადი მათგანი:
მეთოდები | აღწერა |
---|---|
|
იწერს ერთ ბაიტს (არა int ) ნაკადში. |
|
იწერს ბაიტების მასივს ნაკადში |
|
იწერს ბაიტების მასივის ნაწილს ნაკადში |
|
კრეფს ნაკადში ყველა მონაცემს, რომელიც ბუფერში ინახება |
|
ხურავს ნაკადს |
შვილობილი კლასის InputStream
ობიექტის შექმნისას ჩვეულებრივ მითითებულია წყაროს ობიექტი, საიდანაც InputStream
კითხულობს მონაცემებს. შვილობილი კლასის OutputStream
ობიექტის შექმნისას ასევე ჩვეულებრივ მითითებულია სამიზნე ობიექტი ან სამიზნე ნაკადი, რომელშიც იქნება დაწერილი მონაცემები.
მოკლედ გავეცნოთ ყველა მეთოდს კლასის OutputStream
:
მეთოდი write(int b)
ეს მეთოდი წერს გამოტანის ნაკადში ერთ ბაიტს (არა int
). გადაცემული მნიშვნელობა გარდაიქმნება ბაიტ ტიპში, სამი პირველი ბაიტი იგნორირდება.
მეთოდი write(byte[] buffer)
წერს გამოტანის ნაკადში გადაცემულ ბაიტების მასივს. ყველაფერი.
მეთოდი write(byte[] buffer, int offset, int length)
წერს გამოტანის ნაკადში ბაიტების მასივის ნაწილს. ცვლადი offset მიუთითებს მასივის პირველი ელემენტის ნომერს, length
— ჩაწერის ფრაგმენტის სიგრძეს.
მეთოდი flush()
მეთოდი flush()
გამოიყენება იმისთვის, რომ მიაწვდინო დანიშნულების ნაკადს მონაცემები, რომლებიც შეიძლება ქეშირდება მიმდინარე ნაკადში. მნიშვნელოვანია ბუფერიზაციის და/ან რამდენიმე ნაკადის ობიექტების გამოყენების დროს, ერთმანეთთან დაკავშირებული.
მეთოდი close()
წერს დანიშნულების ობიექტში ყველა დაუწერელ მონაცემს. მეთოდი close()
არ არის საჭირო, თუ იყენებთ try
-with-resources.
მაგალითი — ფაილის კოპირება
კოდი | მინიშნება |
---|---|
|
InputStream ფაილის წაკითხვისთვისOutputStream ფაილში ჩასაწერადბუფერი, რომელშიც წავიკითხავთ მონაცემებს სანამ მონაცემები არის ნაკადში წავიკითხოთ მონაცემები ბუფერში ჩავწეროთ მონაცემები ბუფერიდან მეორე ნაკადში |
2. კლასი Writer
კლასი Writer
— ეს არის სრული ანალოგი კლასისა OutputStream
, მხოლოდ ერთი სხვაობით: ის მუშაობს სიმბოლოებთან, char
, ბაიტების ნაცვლად.
ეს არის აბსტრაქტული კლასი: კლასი Writer
ობიექტს ვერ შექმნით. მისი მთავარი მიზანია იყოს საერთო მშობელი კლასი ასობით შვილობილი კლასისთვის და განუსაზღვროს მათ საერთო მოპყრობა სიმბოლური ნაკადებისათვის.
მეთოდები კლასის Writer
(და ყველა მისი შვილობილი კლასი):
მეთოდები | აღწერა |
---|---|
|
იწერს ერთ სიმბოლოს (არა int ) ნაკადში. |
|
იწერს სიმბოლოების მასივს ნაკადში |
|
იწერს სიმბოლოების მასივის ნაწილს ნაკადში |
|
იწერს სტრიქონს ნაკადში |
|
იწერს სტრიქონის ნაწილს ნაკადში |
|
კრეფს ნაკადში ყველა მონაცემს, რომელიც ბუფერში ინახება |
|
ხურავს ნაკადს |
მეთოდები ძალიან ჰგავს კლასის OutputStream
მეთოდებს, მხოლოდ მუშაობს სიმბოლოებთან ბაიტების ნაცვლად.
მეთოდების მოკლე აღწერა:
მეთოდი write(int b)
ეს მეთოდი წერს გამოტანის ნაკადში ერთ სიმბოლოს char
(არა int
). გადაცემული მნიშვნელობა გარდაიქმნება char
ტიპში, ორი პირველი ბაიტი იგნორირდება.
მეთოდი write(char[] buffer)
წერს გამოტანის ნაკადში გადაცემულ სიმბოლოების მასივს.
მეთოდი write(char[] buffer, int offset, int length)
წერს გამოტანის ნაკადში სიმბოლოების მასივის ნაწილს. ცვლადი offset
მიუთითებს მასივის პირველი ელემენტის ნომერს, length
— ჩაწერის ფრაგმენტის სიგრძეს.
მეთოდი write(String str)
წერს გამოტანის ნაკადში გადაცემულ სტრიქონს.
მეთოდი write(String str, int offset, int length)
წერს გამოტანის ნაკადში სტრიქონის ნაწილს: სტრიქონი გარდაიქმნება სიმბოლოების მასივად. ცვლადი offset
მიუთითებს მასივის პირველი ელემენტის ნომერს, length
— ჩაწერის ფრაგმენტის სიგრძეს.
მეთოდი flush()
მეთოდი flush()
გამოიყენება იმისთვის, რომ მიაწვდინო დანიშნულების ნაკადს მონაცემები, რომლებიც შეიძლება ქეშირდება მიმდინარე ნაკადში. მნიშვნელოვანია ბუფერიზაციის და/ან რამდენიმე ნაკადის ობიექტების გამოყენების დროს, ერთმანეთთან დაკავშირებული.
მეთოდი close()
წერს დანიშნულების ობიექტში ყველა დაუწერელ მონაცემს. მეთოდი close()
არ არის საჭირო, თუ იყენებთ try
-with-resources.
პროგრამის მაგალითი, რომელიც კოპირებს ტექსტურ ფაილს:
კოდი | მინიშნება |
---|---|
|
Reader ფაილის წაკითხვისთვისWriter ფაილში ჩასაწერადბუფერი, რომელშიც წავიკითხავთ მონაცემებს სანამ მონაცემები არის ნაკადში წავიკითხოთ მონაცემები ბუფერში ჩავწეროთ მონაცემები ბუფერიდან მეორე ნაკადში |
კლასი StringWriter
არის კიდევ ერთი საინტერესო კლასი — StringWriter
, რომელიც მემკვიდრეა კლასის Writer
. მას აქვს ცვლადი სტრიქონი — ობიექტი StringBuffer
. და ყოველი ჩაწერისას რაღაც ობიექტში StringWriter
, ტექსტი უბრალოდ ემატება შიდა ბუფერს.
მაგალითი:
კოდი | მინიშნება |
---|---|
|
შექმნება მიზნის სიმბოლური ნაკადი StringWriter სტრიქონი იწერება ბუფერში StringWriter სტრიქონი იწერება ბუფერში StringWriter შეიცვლება ობიექტის შიგთავსი სტრიქონად |
ამ შემთხვევაში კლასი StringWriter
— ფაქტობრივად, დამგობარია კლასის StringBuffer
ზევით, მაგრამ კლას StringWriter
— ნაკადის კლასის Writer
მემკვიდრეა და შეიძლება გამოიყენება ობიექტთა ნაკადების ჯაჭვში. საკმაოდ სასარგებლო თვისება პრაქტიკაში.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ