OutputStream klasa – upisivanje bajtova

 

Izlazni tokovi se koriste za pisanje podataka u tok. Osnovna klasa izlaznih tokova jeste klasa OutputStream. Ona obezbeđuje osnovne metode za upisivanje bajtova podataka u tok.

 

Metod write()

Ovaj metod se koristi za upisivanje bajtova u tok. Ovaj metod ima nekoliko definicija, pomoću  kojih možete da upisujete ili nekoliko bajtova odjednom ili bajt po bajt. Na primer,

 

          OutputStream s = new OutputStream();

          byte[] bafer = new byte[1024];

          byte b;

          ..........

          s.write(bafer); // upisuje podatke iz niza bafer u tok

          s.write(bafer, 100, 300); // upisuje od 100-og do 399-og bajta

          s.write(b); // upisuje jedan bajt

 

Metod flush()

Obzirom da izlazni tok može biti povezan sa različitim destinacijama u koje će se podaci upisivati, ovaj metod obezbeđuje da se bajtovi koji se nalaze trenutno u toku zaista i upišu u odgovarajuću destinaciju. Verzija ovog metoda unutar klase OutputStream ne radi ništa, međutim neke podklase kod kojih je ovaj metod od značaja (npr. BufferedOutputStream ili PrintStream) imaju svoje definicije koje preklapaju definiciju unutar klase OutputStream.

 

Metod close()

Slično kao kod ulaznih tokova, trebali biste da eksplicitno zatvorite izlazni tok, kako bi se oslobodili svi resursi koje on koristi.

 

 

Podklase klase OutputStream

 

ByteArrayOutputStream

Ova klasa upisuje podatke iz izlaznog toka u niz bajtova.

 

          ByteArrayOutputStream s = new ByteArrayOutputStream();

          s.write(256);

 

Veličina niza bajtova se automatski povećava prilikom upisivanja podataka. Kada su podaci upisani u ovaj tok, oni mogu biti prosleđeni nekom drugom toku pomoću metoda writeTo().

 

          s.writeTo(nekiDrugiTok);

 

Takođe, jednom upisani podaci mogu biti pročitani pomoću metoda toByteArray() i toString().

 

          byte[] bafer= s.toByteArray(); // kreira niz bajtova

          String baferString = s.toString(); // kreira String objekat

 

 

 

FileOutputStream klasa

Kao što je već napomenuto, tokovi se najčešće koriste za čitanje i upisivanje podataka u fajlove. Klasa koja se koristi za upisivanje bajtova u fajl jeste FileOutputStream klasa. Ova klasa, obzirom da radi na nivou bajtova, se obično koristi za kreiranje fajlova koji predstavljaju slike, dok se za tekst koriste klase koje rade na nivou karaktera.

 

Sledeća naredba kreira ulazni tok koji će biti upisan u fajl:

 

          FileOutputStream s = new FileOutputStream("imeFajla");

 

BufferedOutputStream

Ova klasa kreira baferovan niz bajtova u kome se čuvaju podaci koji se upisuju u tok. Na ovaj način se, slično kao kod ulaznog baferovanog toka, postiže veća efikasnost programa. Ovo je jedna od dve klase koje implementira metod flush(), koji forsira upisivanje podataka iz toka na određenu destinaciju. Obično se koristi u kombinaciji sa drugim klasama izlaznih tokova:

 

          BufferedOutputStream s = new BufferedOutputStream(new 

                   FileOutputStream("imeFajla");

 

DataOutputStream

Ova klasa omogućava da se u ulazni tok upisuju različiti tipovi podataka u binarnom formatu. Unutar nje postoji metod write(), ali i metodi kao što su writeBoolean(),writeInt(),writeDouble() itd. Ovi metodi proizvode izuzetak tipa EOFException, pa je neophodno obraditi ga u kodu. Pogledajte sledeći primer:

 

          DataOutputStream out = new DataOutputStream(new

                   BufferedOutputStream(new FileOutputStream("imeFajla")));

          try {

                    for (int i = 0; i < cene.length; i ++) {

                             out.writeDouble(cene[i]);

                             out.writeInt(kolicina[i]);

                             out.writeUTF(opis[i]);

                    }

          } catch (EOFException e) {
          }
 
 
Writer klasa – upisivanje karaktera
 
Kao i kod ulaznih tokova, i kod izlaznih postoje posebne klase koje rade sa karakterima umesto sa 
bajtovima. Sve ove klase nasleđuju klasu Writer. Klasa Writer je apstraktna klasa unutar koje su
definisana tri apstraktna metoda koje svaka njena podklasa mora da implementira.
To su metodi
write(),
flush() i close().

 

OutputStreamWriter

Ova klasa je posrednik između tokova karaktera i tokova bajtova. Karakteri koji su upisani u nju se kodiraju u bajtove. Prilikom poziva metoda write() ove klase, određeni karakter se prevodi u niz bajtova i čuva u baferu pre nego što se upiše u neki izlazni tok. Međutim, sami karakteri koji se upisuju nisu baferovani.

 

FileWriter

Ovo je klasa koja se koristi za upisivanje karaktera u fajl i direktno nasleđuje klasu OutputStreamWriter. Ova klasa ima nekoliko konstruktora.

 

-         public FileWriter(String fileName) throws IOException  - kreira objekat na osnovu imena fajla koje je prosleđeno kao argument. Ukoliko fajl ne može da bude kreiran ili otovren, proizvodi se izuzetak

-         public FileWriter(String fileName, boolean append) throws IOException – kreira objekat na osnovu imena fajla, pri čemu argument append određuje da li će se podaci nadovezivati na već upisane podatke u fajlu, ili će se upisivati na početak fajla

-         public FileWriter(File file) throws IOException – kreira objekat FileWriter na osnovu objekta klase File (o klasi File biće više reči u sledećoj lekciji)

 

BufferedWriter

Ova klasa upisuje tekst u neki tok karaktera, pri čemu se karakteri čuvaju u baferu, kako bi bila omogućena veća efikasnost. U okviru nje postoji metod newLine() koji koristi sistemski definisanu oznaku za novi red. Uvek je bolje pozvati ovaj metod kada želite da završite sa unosom jedne linije i počnete novu, nego direktno upisivati oznaku za novi red (npr. '\n'), obzirom da različite platforme mogu da koriste različite oznake za završetak jedne linije teksta.

Ova klasa se koristi veoma često za poboljšanje efikasnosti rada sa bilo kojim drugim tokom karaktera:

 

          BufferedWriter izlaz = new BufferedWriter(new FileWriter(izlaz));

 

 

Standardni izlaz

 

Slično kao što je klasna promenljiva in klase System odgovarala satndardnom ulazu, tako i promenljiva out ove klase odgovara standardnom izlazu, tj. monitoru. Standardni izlazni tok pripada klasi PrintStream. Ova klasa obezbeđuje neke dodatne metode, sa kojima ste se već susretali.

 

print() metod

Pomoću ovog metoda možete da odštampate (prikažete) različite tipove podatka u izlazni tok, pri čemu se oni prvo konvertuju u String objekat. Pogledajte sledeći primer:

 

          public class PrintTest {

                   public static void main(String[] args) {

                             for (int i=1; i<=5; i++)        System.out.print(i);

                   }

          }

 

Ova klasa će nakon izvršavanja ispisati sledeću poruku na monitoru:

 

          12345

 

println() metod

Slično kao i prethodni, i ovaj metod ispisuje neki string, pri čemu na kraj dodaje oznaku za kraj reda, tj. ispisuje jednu liniju teksta. Ukoliko promenimo prethodni kod u

 

          public class PrintTest {

                   public static void main(String[] args) {

                             for (int i=1; i<=5; i++)        System.out.println(i);

                   }

          }

 

rezultat izvršavanja će biti sledeći:

          1

          2

          3

          4

          5

Dodaj komentar Sviđa mi se - (0) Ne sviđa mi se - (0)    

  • Izlazni tokovi (Output Streams) 1
  • Izlazni tokovi (Output Streams) 2
  • Izlazni tokovi (Output Streams) 3