1. OutputStream
klase
Kamakailan lang ay nag-explore kami ng mga input stream. Oras na para pag-usapan ang mga output stream.
Ang OutputStream
klase ay ang parent class para sa lahat ng klase na sumusuporta sa byte na output. Isa itong abstract na klase na walang ginagawa sa sarili nitong, ngunit mayroon itong mga descendant na klase para sa bawat okasyon.
Parang sobrang kumplikado. Upang ilagay ito nang mas simple, ang klase na ito ay tumatakbo sa mga byte, at hindi, halimbawa, mga character o iba pang mga uri ng data. At ang katotohanan na ito ay abstract ay nangangahulugan na karaniwan ay hindi natin ito ginagamit, ngunit sa halip ay isa sa mga descendant na klase nito. Halimbawa, FileOutputStream
at iba pa.
Ngunit bumalik sa OutputStream
klase. Ang klase na ito ay may mga pamamaraan na dapat ipatupad ng lahat ng descendant class nito. Narito ang mga pangunahing:
Paraan | Paglalarawan |
---|---|
|
Nagsusulat ng isang byte (hindi isang int ) sa stream. |
|
Nagsusulat ng hanay ng mga byte sa stream |
|
Nagsusulat ng bahagi ng isang hanay ng mga byte sa stream |
|
Isinulat ang lahat ng data na nakaimbak sa buffer sa stream |
|
Isinasara ang stream |
Kapag gumawa ka ng object ng isang klase na nagmamana ng InputStream
, karaniwan mong tinutukoy ang source object kung saan InputStream
nagbabasa ang data. Kapag gumawa ka ng object ng isang klase na nagmamana ng OutputStream
, karaniwan mo ring tinutukoy ang target na object o stream kung saan isusulat ang data.
Sa madaling sabi, suriin natin ang lahat ng mga pamamaraan ng OutputStream
klase:
write(int b)
paraan
Ang pamamaraang ito ay nagsusulat ng isang byte (hindi isang int
) sa output stream. Ang naipasa na halaga ay inihagis sa isang byte, at ang unang tatlong byte ng int ay itatapon.
write(byte[] buffer)
paraan
Isinulat ang ibinigay na hanay ng mga byte sa output stream. Ayan yun.
write(byte[] buffer, int offset, int length)
paraan
Nagsusulat ng isang bahagi ng naipasa na hanay ng mga byte sa output stream. Ang offset variable ay nagpapahiwatig ng index ng unang elemento ng array, at length
ang haba ng subset na isusulat.
flush()
paraan
Ang flush()
pamamaraan ay ginagamit upang pilitin ang anumang data na posibleng na-buffer sa kasalukuyang stream na maisulat sa target na stream. May kaugnayan ito kapag gumagamit ng buffering at/o maramihang stream object na nakaayos sa isang chain.
close()
paraan
Nagsusulat ng anumang hindi nakasulat na data sa target na bagay. Ang close()
pamamaraan ay hindi kailangang tawagan kung gumagamit ka ng isang try-with-resources
bloke.
Halimbawa ng pagkopya ng file
Code | Tandaan |
---|---|
|
InputStream para sa pagbabasa mula sa isang file OutputStream para sa pagsulat sa isang file Buffer kung saan babasahin natin ang data Hangga't mayroong data sa stream Basahin ang data sa buffer Isulat ang data mula sa buffer hanggang sa pangalawang stream |
2. Writer
klase
Ang Writer
klase ay eksaktong kapareho ng OutputStream
klase, ngunit isang pagkakaiba lang muli: gumagana ito sa mga character ( char
) sa halip na mga byte.
Isa itong abstract na klase: hindi ka makakagawa ng mga object ng Writer
klase. Ang pangunahing layunin nito ay maging isang karaniwang parent class para sa daan-daang mga descendant na klase at bigyan sila ng mga karaniwang pamamaraan para sa pagtatrabaho sa mga stream ng character.
Mga pamamaraan ng Writer
klase (at lahat ng mga descendant na klase nito):
Paraan | Paglalarawan |
---|---|
|
Nagsusulat ng isang character (hindi isang int ) sa stream. |
|
Nagsusulat ng hanay ng mga character sa stream |
|
Nagsusulat ng bahagi ng hanay ng mga character sa stream |
|
Nagsusulat ng string sa stream |
|
Nagsusulat ng bahagi ng isang string sa stream |
|
Isinulat ang lahat ng data na nakaimbak sa buffer sa stream |
|
Isinasara ang stream |
Ang mga pamamaraan ay halos kapareho sa mga pamamaraan ng OutputStream
klase, ngunit gumagana ang mga ito sa mga character sa halip na mga byte.
Paglalarawan ng mga pamamaraan:
write(int b)
paraan
Ang pamamaraang ito ay nagsusulat ng isang character ( char
— hindi isang int
) sa output stream. Ang naipasa na halaga ay na-cast sa isang char
, at ang unang dalawang byte ay itatapon.
write(char[] buffer)
paraan
Isinulat ang ibinigay na hanay ng mga character sa output stream.
write(char[] buffer, int offset, int length)
paraan
Nagsusulat ng bahagi ng naipasa na hanay ng mga character sa output stream. Ang offset
variable ay nagpapahiwatig ng index ng unang elemento ng array, at length
ang haba ng subset na isusulat.
write(String str)
paraan
Isinulat ang ibinigay na string sa output stream.
write(String str, int offset, int length)
paraan
Nagsusulat ng isang bahagi ng ibinigay na string sa output stream: ang string ay na-convert sa isang array ng mga character. Ang offset
variable ay nagpapahiwatig ng index ng unang elemento ng array, at length
ang haba ng subset na isusulat.
flush()
paraan
Ang flush()
pamamaraan ay ginagamit upang pilitin ang anumang data na posibleng na-buffer sa kasalukuyang stream na maisulat sa target na stream. May kaugnayan ito kapag gumagamit ng buffering at/o maramihang stream object na nakaayos sa isang chain.
close()
paraan
Nagsusulat ng anumang hindi nakasulat na data sa target na bagay. Ang close()
pamamaraan ay hindi kailangang tawagan kung gumagamit ka ng isang try-with-resources
bloke.
Halimbawa ng program na kumukopya ng text file:
Code | Tandaan |
---|---|
|
Reader para sa pagbabasa mula sa isang file Writer para sa pagsulat sa isang file Buffer kung saan babasahin natin ang data Hangga't mayroong data sa stream Basahin ang data sa isang buffer Isulat ang data mula sa buffer hanggang sa pangalawang stream |
StringWriter
klase
May isa pang kawili-wiling klase na nagmamana ng Writer
klase: ito ay tinatawag na StringWriter
. Naglalaman ito ng nababagong string — isang StringBuffer
bagay. At sa tuwing "isusulat" mo ang isang bagay sa StringWriter
bagay, ang teksto ay idinaragdag lamang sa panloob na buffer nito.
Halimbawa:
Code | Tandaan |
---|---|
|
Ang isang target na stream ng character ( StringWriter ) ay nilikha Isang string ay nakasulat sa buffer sa loob ng StringWriter Isang string ay nakasulat sa buffer sa loob ng StringWriter Pag-convert ng mga nilalaman ng isang bagay sa isang string |
Sa kasong ito, ang StringWriter
klase ay mahalagang isang wrapper sa StringBuffer
klase, ngunit ang StringWriter
klase ay isang inapo ng Writer
stream class, at maaari itong magamit sa mga chain ng stream object. Ito ay isang medyo kapaki-pakinabang na ari-arian sa pagsasanay.
GO TO FULL VERSION