Predavanje br. index|1|2|3|4|5|6|7|8|9|10|11|12|13|14|HOME
Operacije ulaza i izlaza - što je stream? – klase streamova
– odakle streamovi dolaze? – klasa InputStream – čitanje byteova – čitanje više
byteova odjednom – prebrojavanje dostupnih byteova – preskakanje byteova –
markiranje i resetiranje – zatvaranje streamova – izlazni streamovi – primjer
izlaznog streama – čitanje iz datoteke primjer čitanja iz datoteke – pisanje u
datoteku – primjer pisanja u datoteku – dodavanje na kraj datoteke – filtriranje
streamova – filtrirani streamovi – bufferirani streamovi – klase podatkovnih
streamova – klasa PrintStream – klasa PushBackInputStream – klasa File –
konstruktori klase File – metode klase File – primjeri metoda iz klase File –
klasa FileDialog – klasa RandomAccessFile – sučelje FilenameFilter – klase
Reader i Writer – klasa Reader – klasa Writer – klasa InputStreamReader – klasa
OutputStreamWriter – dostupne kodne stranice – klasa FileWriter – klasa
FileReader – klasa BufferedReader – klasa LineNumberReader – klasa
BufferedWriter
Podaci se ponekad umjesto na zaslon računala ispisuju u
datoteku. Unix i DOS za tu svrhu imaju redirekcijske operatore <
i >.
Ponekad je potreban i finiji pristup, na primjer ako želite neke podatke uputiti
u datoteku, a druge ostaviti na zaslonu. Ili možda želite istovremeno imati
pristup u više datoteka. Također, možda želite tražiti od korisnika da unese
podatke ne samo preko komandne linije nego i na neki drugi način. Ili želite
pročitati datoteku koja je napisana u određenom formatu, poslati podatke preko
mreže ili ih s nje učitati. U Javi se sve ove operacije obavljaju uz pomoć
streamova. Stream je na primjer i System.out
koji ste susreli već u prvom predavanju.
Stream je niz podataka koji ima neodređenu duljinu. Naziv stream (struja, tok) je odabran jer ta struktura nalikuje struji vode koja neprekidno teče i nema definiranog kraja. Još bolja analogija je rep (red čekanja). Za vrijeme dok se uslužuju ljudi na početku repa, novi dolaze na njegov kraj. Rep je diskretna struktura, ali to ne znači da njegovi članovi nisu međusobno povezani raznim relacijama.
U Javi se stream sastoji od niza diskretnih byteova. Oni mogu predstavljati znakove ili neke druge vrste podataka. Mogu dolaziti brže nego što ih je moguće obraditi ili pak process može čekati dok ne dođe sljedeći za obradu.
Ključ obrade streama je while petlja
koja obrađuje svaki pojedini element streama dok ne učita znak za kraj streama
ili dok se ne pojavi neki drugi iznimni uvjet. Na Unixu je <Ctrl-D> znak
za završetak streama. Windows za tu svrhu koristi <Ctrl-Z>.
Gotove sve klase koje izravno rade sa streamovima dijelovi su
paketa java.io.
(Postoji također nekoliko dodatnih u paketima sun.io i
sun.net, ali
te su namjerno skrivene. Ima i nekoliko klasa u paketu java.util.zip.)
Dvije glavne klase su java.io.InputStream
i java.io.OutputStream.
To su apstraktne klase i one čine temelj mnogih potklasa sa specijaliziranim
mogućnostima. Među njima se najčešće koriste:
BufferedInputStream
BufferedOutputStream
ByteArrayInputStream
ByteArrayOutputStream
DataInputStream
DataOutputStream
FileInputStream
FileOutputStream
FilterInputStream
FilterOutputStream
LineNumberInputStream
ObjectInputStream
ObjectOutputStream
PipedInputStream
PipedOutputStream
PrintStream
PushbackInputStream
SequenceInputStream
StringBufferInputStream
Stream System.out
je, recimo, OutputStream;
i to posebno, PrintStream.
Postoji odgovarajući System.in
koji je InputStream
namijenjen čitanju podataka s konzole.
Podaci za streamove dolaze također i iz datoteka. Kasnije ćete vidjeti kako
koristiti klasu File
te klase FileInputStream
i FileOutputStream
za čitanje podataka iz datoteka i pisanje u njih.
Mrežne konekcije obično daju streamove. O tome će biti riječi u zasebnom
predavanju. Kad se povežete na neki web ili ftp ili neki drugi poslužitelj,
čitate podatke koje on šalje tako da s njim povežete jedan InputStream
i jedan OutputStream.
Java programi i sami proizvode streamove. Na primjer, ByteArrayInputStream,
ByteArrayOutputStream,
StringBufferInputStream,
PipedInputStream,
i PipedOutputStream
se koriste za prijenos podataka iz jednog dijela Java programa u drugi.
Ponešto neočekivano, komponente kao što je TextArea
ne proizvode streamove. Međutim, stringove koje oni stvaraju uvijek možete
koristiti da biste kreirali ByteArrayInputStream
ili StringBufferInputStream.
Klasa java.io.InputStream
je apstraktna klasa koja sadrži osnovne metode za čitanje čistih byteova
podataka iz streama. Iako je to apstraktna klasa, mnoge metode u biblioteci
vraćaju objekt tipa InputStream,
tako da ćete često trebati raditi direktno s nekom od metoda deklariranih u toj
klasi.
public abstract int read() throws IOExceptionpublic int read(byte[] data) throws IOExceptionpublic int read(byte[] data, int offset, int length) throws IOExceptionpublic long skip(long n) throws IOExceptionpublic int available() throws IOExceptionpublic void close() throws IOExceptionpublic synchronized void mark(int readlimit)public synchronized void reset() throws IOExceptionpublic boolean markSupported()
Primijetite
da gotovo sve ove metode mogu izbaciti IOException.
To vrijedi za uglavnom sve što se odnosi na ulaz i izlaz. Jedina iznimka od tog
pravila je klasa PrintStream
koja će progutati sve iznimke.
Osnovna
read()
metoda iz klase java.io.InputStream
čita pojedinačni neoznačeni byte podataka i vraća njegovu int
vrijednost. To je broj između 0 i 255. Kad se naiđe na kraj streama, vraća se
-1, i to možete koristiti kao flag pomoću kojeg ćete ustanoviti da ste došli do
kraja streama.
public abstract int read() throws IOException
Evo
jednog jednostavnog programa koji vraća kao echo korisnikov unos na komandnoj
liniji. Byte se prije ispisa pretvara u ekvialentni ISO Latin-1 znak. Ovaj
program neće pravilno raditi sa Unicode znakovima. Možete ga dakle koristiti
samo za čiste podatke, a za tekstove i osobito ne-ASCII podatke koristiti klase
java.io.Reader
i java.io.Writer.
/* Note that as a general rule on most platforms charactersare only sent to System.in a line at a time, not as each characteris typed. This allows the user to backspace over mistakes and correct them. Java does not allow you to put the console into"raw" mode. */ import java.io.*; public class Echo { public static void main(String[] args) { echo(System.in); } public static void echo(InputStream in) { try { while (true) { // Notice that although a byte is read, an int // with value between 0 and 255 is returned. // Then this is converted to an ISO Latin-1 char // in the same range before being printed. int i = in.read(); // -1 is returned to indicate the end of stream if (i == -1) break; // without the cast a numeric string like "65" // would be printed instead of the character "A" char c = (char) i; System.out.print(c); } } catch (IOException e) { System.err.println(e); } System.out.println(); } } % javac Echo.java% java Echoabcdefgabcdefg<Ctrl-C>%
Dok
osnovna read() metoda
čita byte po byte, sljedeće dvije overloaded varijante čitaju polja byteova.
public int read(byte[] data) throws IOExceptionpublic int read(byte[] data, int offset, int length) throws IOException
Prva
metoda čita onoliko byteova koliko joj treba da napuni polje data. Druga
čita onoliko byteova iz ulaznog streama koliko joj je zadano u argumentu
length i
sprema ih u polje data počevši
od pozicije offset.
Te
su metode blokorane dok ne stignu raspoloživi podaci. Tada učitaju onoliko
podataka koliko stane u polje ili koliko je navedeno u length.
Nakon
toga vraćaju broj byteova koje su učitale. Ne smijete pretpostaviti da će polje
biti uvijek napunjeno ili da će zaista biti učitano length
byteova. Ako naiđe kraj streama, vraća se -1.
Metoda
available()
ispituju koliko byteova sa uzlaznog streama je spremno za učitavanje bez
blokiranja.
public int available()
throws IOException
Na
primjer, sljedeći program je efikasnija verzija prethodnog programa Echo jer
koristi metodu available() za
ispitivanje koliko byteova je spremno za učitavanje, a zatim kreira polje točno
te veličine, učitava byteove u polje i konvertira ga u String koji
zatim ispisuje.
import java.io.*; public class EfficientEcho { public static void main(String[] args) { echo(System.in); } public static void echo(InputStream in) { try { while (true) { int n = in.available(); if (n > 0) { byte[] b = new byte[n]; int result = in.read(b); if (result == -1) break; String s = new String(b); System.out.print(s); } // end if } // end while } // end try catch (IOException e) { System.err.println(e); } } } % javac Echo.java% java Echoabcdefgabcdefg<Ctrl-C>%
Metoda
skip()
čita i odbacuje specificirani broj byteova.
public int skip(long n)
throws IOException
Možete
je koristiti, na primjer, ako želite brzo prođi standardni header ili prefiks
nekih podataka. U sljedećem fragmentu koda koristi se skip() za
preskakanje praznina uključenih u DataInputStream
dis.
case 171: // lookupswitch pad = 3 - (position % 4); dis.skip(pad); defaultByte = dis.readInt(); int npairs = dis.readInt(); result = position + " lookupswitch " + defaultByte + " " + npairs; for (int i = 0; i < npairs; i++) { int newPosition = position + pad + 12 + i*8; result += "\n" + newPosition + " " + dis.readInt() + " " + dis.readInt(); }
Često je korisno ako možete učitati nekoliko byteova, a zatim se vratiti natrag i učitati ih ponovo. Na primjer, pri oblikovanju nekog kompajlera ne možete znati da li trebate učitati znak <, <<, ili <<= sve dok ne učitate dva ili više byteova. Bilo bi korisno ako biste se mobli vratiti natrag i ponovo učitati token nakon što ste okrili o kojem se radi. Dizajniranje kompajlera i problemi parsiranja uvijek osiguravaju mnoštvo primjera, no slične potrebe se pojavljuju i drugdje.
Neki, ali ne svi streamovi dopuštaju vam da markirate određenu poziciju u streamu i onda se vratite na nju. To se radi pomoću sljedećih metoda:
public synchronized void mark(int readlimit)public synchronized void reset() throws IOExceptionpublic boolean markSupported()
Metoda
markSupported()
vraća true ako taj
stream podržava markiranje, a false inače.
Pod
pretpostavkom da je markiranje podržano, metoda mark()
stavlja bookmark na mjesto gdje se kasnije želite vratiti pomoću metode
reset().
Istodobno u jednom streamu može postojati samo jedan takav bookmark. Sljedeće
markiranje izbrisat će prethodno. Ako markiranje nije podržano, ove će metode
izbaciti IOException.
Kad
ste završili s nekim streamom, trebali biste ga zatvoriti kako bi se otpustili
resursi koji su s njim povezani. Jednom kad je stream zatvoren, svaki pokušaj
čitanja iz njega izbacit će IOException.
Stream
(u ovom slučaju ulazni) zatvarate pomoću metode close():
public void close() throws
IOException
Ako
se stream ne može zatvoriti, izbacit će se IOException.
Klasa
java.io.OutputStream
šalje čiste byteove podataka na neko odredište, npr. konzolu ili mrežni
poslužitelj. Ova je klasa apstraktna, isto kao i InputStream.
Međutim, mnoge metode u biblioteci klasa napravljene su tako da vraćaju objekte
tipa OutputStream
umjesto objekte iz njenih specifičnih podklasa. Također, mnoge metode klase
OutputStream
su općenito korisne. To su:
public abstract void write(int b) throws IOExceptionpublic void write(byte[] data) throws IOExceptionpublic void write(byte[] data, int offset, int length) throws IOExceptionpublic void flush() throws IOExceptionpublic void close() throws IOException
Nekoliko
različitih write()
metoda šalju čiste byteove podataka svakom procesu koji osluškuje dani stream.
Ponekad
operacijski sustav bufferira izlazne streamove zbog boljih performansi. To znači
da se byteovi prije ispisa akumuliraju u spremnik čija veličina može biti od
nekoliko byteova do nekoliko tisuća byteova. Kad se on napuni, svi podaci se
ispisuju odjednom. Metoda flush()
pokrenut će, međutim, ispis bez obzira da li je spremnik pun ili nije.
Primijetite
da to nije isto što i bufferiranje koje provodi klasa BufferedOutputStream
koje izvodi Java runtime. Ovdje se radi o native bufferiranju,
dakle procesu na razini operacijskog sustava. Međutim, poziv metode flush() trebao
bi isprazniti oba spremnika.
Metoda
close()
zatvara stream i otpušta resurse koji su s njim povezani. Jednom kad je stream
zatvoren, pokušaj pisanja u njega izbacit će IOException.
Jedini
izlazni streamovi koje ste do sad upoznali su System.out
i System.err.
Sljedeći primjer koristi metode write()
and flush()
iz klase OutputStream
da bi na System.out
ispisao string “Hello World”
import java.io.*; public class HelloOutputStream { public static void main(String[] args) { String s = "Hello World\r\n"; // Convert s to a byte array byte[] b = new byte[s.length()]; s.getBytes(0, s.length()-1, b, 0); try { System.out.write(b); System.out.flush(); } catch (IOException e) { System.err.println(e); } } } % javac HelloOutputStream.java% java HelloOutputStream ello World%
Primijetite da program ne radi baš onako kako bi se očekivalo nego proguta prvi znak.
Klasa
java.io.FileInputStream
predstavlja InputStream
koji čita byteove iz datoteke. Ima sljedeće public konstruktore i metode:
public FileInputStream(String name) throws FileNotFoundExceptionpublic FileInputStream(File file) throws FileNotFoundExceptionpublic FileInputStream(FileDescriptor fdObj) public native int read() throws IOExceptionpublic int read(byte[] data) throws IOExceptionpublic int read(byte[] data, int offset, int length) throws IOExceptionpublic native long skip(long n) throws IOExceptionpublic native int available() throws IOExceptionpublic native void close() throws IOExceptionpublic final FileDescriptor getFD() throws IOException
S
iznimkom konstruktora te metode getFD(),
ove metode samo prekrivaju istoimene metode klase java.io.InputStream.
Jedina je razlika što čitaju podatke iz datoteke.
Novi
objekt tipa FileInputStream
konstruirate tako da konstruktoru proslijedite ime datoteke, na primjer:
FileInputStream fis = new
FileInputStream("ulaz.txt");
Ako
datoteka ne postoji, izbacit će se iznimka FileNotFoundException,
podklasa od IOException.
Općenito, Java će tražiti datoteke u aktivnom direktoriju, no one se ne moraju
nužno nalaziti u direktoriju u kojem se nalazi .class datoteka.
Sljedeća
aplikacija čita datoteke koje su navedene na komandnoj liniji i ispisuje njihov
sadržaj na System.out.
import java.io.*; public class Type { public static void main(String[] args) { for (int i = 0; i < args.length; i++) { try { FileInputStream fis = new FileInputStream(args[i]); int n; while ((n = fis.available()) > 0) { byte[] b = new byte[n]; int result = fis.read(b); if (result == -1) break; String s = new String(b); System.out.print(s); } // end while fis.close(); } // end try // Is this catch strictly necessary? catch (FileNotFoundException e) { System.err.println("Could not find file " + args[i]); } catch (IOException e) { System.err.println(e); } System.out.println(); } // end for } // end main } % javac Type.java% java Type "../html/TricksterApplet.html"<APPLET CODE="TricksterApplet.class" CODEBASE="http://student.math.hr/~vedris/java/classes" ARCHIVE="Trickster.jar"WIDTH=1 HEIGHT=1></APPLET>%
Klasa
java.io.FileOutputStream
predstavlja OutputStream
koji upisuje byteove u datoteku. Ima sljedeće public konstruktore i metode:
public FileOutputStream(String name) throws IOExceptionpublic FileOutputStream(String name, boolean append) throws IOExceptionpublic FileOutputStream(File file) throws IOExceptionpublic FileOutputStream(FileDescriptor fdObj) public native void write(int b) throws IOExceptionpublic void write(byte[] data) throws IOExceptionpublic void write(byte[] data, int offset, int length) throws IOExceptionpublic native void close() throws IOExceptionpublic final FileDescriptor getFD() throws IOException
S
iznimkom konstruktora te metode getFD(),ove
metode samo prekrivaju istoimene metode klase java.io.OutputStream.
Jedina je razlika što pišu podatke u datoteku.
Novi
objekt tipa FileOutputStream
konstruirate tako da konstruktoru proslijedite ime datoteke, na primjer:
FileOutputStream fos = new
FileOutputStream("izlaz.txt");
Ako datoteka postoji u aktivnom direktoriju, bit će prebrisana i u nju upisani novi podaci. Ako ne postoji, kreirat će se.
U
sljedećem primjeru čita se korisnikov input sa System.in
i ispisuje se u datoteke specificirane na komandnoj liniji.
import java.io.*; public class MultiType { public static void main(String[] args) { FileOutputStream[] fos = new FileOutputStream[args.length]; for (int i = 0; i < args.length; i++) { try { fos[i] = new FileOutputStream(args[i]); } catch (IOException e) { System.err.println(e); } } // end for try { while (true) { int n = System.in.available(); if (n > 0) { byte[] b = new byte[n]; int result = System.in.read(b); if (result == -1) break; for (int i = 0; i < args.length; i++) { try { fos[i].write(b, 0, result); } catch (IOException e) { System.err.println(e); } } // end for } // end if } // end while } // end try catch (IOException e) { System.err.println(e); } for (int i = 0; i < args.length; i++) { try { fos[i].close(); } catch (IOException e) { System.err.println(e); } } } // end main } % javac MultiType.java% java MultiType izlaz1.txt izlaz2.txtnebo je plavo <Ctrl-C>%% ls izlaz*.txtizlaz1.txtizlaz2.txt% more izlaz1.txt
nebo je plavo
% more izlaz2.txt
nebo je plavo
%
Ako
želite da se novi sadržaj doda na kraj datoteke umjesto da prebriše prethodni
sadržaj, proslijedit ćete vrijednost true kao drugi
argument konstruktoru FileOutputStream().
Na primjer:
FileOutputStream fos = new
FileOutputStream("izlaz.txt", true);
U
sljedećem primjeru čita se korisnikov input sa System.in
i dodaje na kraj datoteka specificiranih na komandnoj liniji.
import java.io.*; public class Append { public static void main(String[] args) { FileOutputStream[] fos = new FileOutputStream[args.length]; for (int i = 0; i < args.length; i++) { try { fos[i] = new FileOutputStream(args[i], true); } catch (IOException e) { System.err.println(e); } } // end for try { while (true) { int n = System.in.available(); if (n > 0) { byte[] b = new byte[n]; int result = System.in.read(b); if (result == -1) break; for (int i = 0; i < args.length; i++) { try { fos[i].write(b, 0, result); } catch (IOException e) { System.err.println(e); } } // end for } // end if } // end while } // end try catch (IOException e) { System.err.println(e); } for (int i = 0; i < args.length; i++) { try { fos[i].close(); } catch (IOException e) { System.err.println(e); } } // end for } // end main } % javac Append.java% java Append izlaz1.txt izlaz2.txta trava je zelena. <Ctrl-C>% more izlaz1.txtnebo je plavoa trava je zelena. % more izlaz2.txtnebo je plavo a trava je zelena.%
Klase
java.io.FilterInputStream
i java.io.FilterOutputStream
su konkretne podklase od InputStream
i OutputStream
koje na neki način modificiraju podatke osnovnih streamova. Rijetko ćete ih
koristiti izravno, ali njihove su podklase iznimno važne, posebno DataInputStream
i DataOutputStream.
Filtar-stream
povezujete s osnovnim tako da da osnovni proslijedite konstruktoru
filtar-streama. Na primjer, da biste kreirali novi objekt tipa DataOutputStream
iz objekta FileOutputStream
mogli biste postupiti ovako:
FileOutputStream fos = new FileOutputStream("ln.txt");DataOutputStream dos = new DataOutputStream(fos);
To se može kombinirati i u jednoj liniji:
DataOutputStream dos = new DataOutputStream(new FileOutputStream("ln.txt"));
BufferedInputStream
i BufferedOutputStream
Ove klase bufferiraju čitanje i pisanje tako da podatke najprije učitavaju u spremnik (buffer, interrno polje byteova). Tako neka aplikacija može čitati byteove iz streama bez pozivanja native metoda koje iza toga stoje. Podaci se učitavaju iz buffera ili u njega upisuju u blokovima, a naknadni pristupi usmjeravaju se direktno prema spremniku.
DataInputStream
i DataOutputStream
Ove klase čitaju i pišu podatke koji pripadaju primitivnim Java tipovima, kao i podatke tipa String na način koji ne ovisi o mašini (Big-endian za integer, IEEE-754 za float i double, UTF-8 za Unicode)
Ova ste klasu već susretali preko njenih implementacija System.out i System.err. Omogućuje vrlo jednostavno ispisivanje primitivnih vrijednosti, objekata i string literala. Klasa hvata sve iznimke tipa IOException i namijenjena je ponajprije za debugging.
Ova klasa osigurava pushback spremnik pomoću kojeg je moguće "poništiti" čitanje byteova sa streama. Kod sljedećeg čitanja sa streama bit će učitani ti “poništeni” byteovi.
GZIPInputStream
i GZIPOutputStream
Ovo
su klase iz paketa java.util.zip
i obavljaju kompresiju i dekompresiju podataka.
DigestInputStream
i DigestOutputStream
Ovo
su klase iz paketa java.security
i izračunavaju tzv. MessageDigest
za streamove koristeći neku jaku hash funkciju, npr SHA.
CipherInputStream
i CipherOutputStream
Klase
su iz paketa javax.crypto
koji je dio Java Cryptography
Extension (JCE), standardnog proširenja Jave, a uključen je u
JavaTM 2 Platform Std. Ed. v1.4.0. i izračunavaju enkripcije i dekripcije
streamova koristeći razne algoritme kao DES, RSA, Blowfish i druge.
ObjectInputStream
i ObjectOutputStream
Podklase
od of DataInputStream
i DataOutputStream
koje mogu serijalizirati i deserijalizirati Java objekte u čiste byteove (i
obratno). Koristi se kod udaljenog pozivanja metoda (RMI) i za JavaBeans.
Možete
kreirati i svoje vlastite podklase od java.io.FilterInputStream
i java.io.FilterOutputStream
koje će izvoditi filtriranja prema vašim potrebama.
Klase
java.io.BufferedInputStream
i java.io.BufferedOutputStream
omogućuju čitanje i pisanje na način da se podaci prvo spremaju u spremnik
(buffer) koji je zapravo interno polje byteova. Program tada čita byteove iz
streama bez prethodnog pozivanja native metode dok god ima podataka u
spremniku. Podaci se čitaju iz spremnika ili pišu u njega u blokovima, a nakon
toga su dostupni izravno iz spremnika.
Sa stanovišta programera, jedina razlika između običnog i bufferiranog streama je u konstruktorima:
public BufferedInputStream(InputStream in)public BufferedInputStream(InputStream in, int size)public BufferedOutputStream(OutputStream out)public BufferedOutputStream(OutputStream out, int size)
Argument
size je broj
byteova u spremniku. Ako nije naveden, podrazumijeva se 512.
Optimalna veličina spremnika jako ovisi o platformi i općenito je povezana sa veličinom bloka na disku, barem za datotečne streamove. Manje od 512 će vjerojatno biti premalo, a više od 4096 previše. Idealno bi bilo da veličina spremnika bude cjelobrojni višekratnik veličine bloka diska. Za nepouzdane mrežne konekcije bolje je odabrati manju veličinu spremnika. Na primjer,
URL u = new URL("http://java.developer.com");BufferedInputStream bis = new BufferedInputStream(u.openStream(), 256);
Klase
java.io.DataInputStream
i java.io.DataOutputStream
čitaju i pišu primitivne Java tipove podataka i stringove na način koji ne ovisi
o mašini. Općenito ćete DataInputStream
koristiti za čitanje podataka koji su napisani pomoću DataOutputStream.
Taj format koristi standard IEEE 754 za floating point, big-endian za integer, i
modificirani UTF-8 za Unicode.
DataOutputStream
deklarira sljedeće konstruktore i metode:
public DataOutputStream(OutputStream out) public synchronized void write(int b) throws IOExceptionpublic synchronized void write(byte[] data, int offset, int length) throws IOExceptionpublic final void writeBoolean(boolean b) throws IOExceptionpublic final void writeByte(int b) throws IOExceptionpublic final void writeShort(int s) throws IOExceptionpublic final void writeChar(int c) throws IOExceptionpublic final void writeInt(int i) throws IOExceptionpublic final void writeFloat(float f) throws IOExceptionpublic final void writeDouble(double d) throws IOExceptionpublic final void writeBytes(String s) throws IOExceptionpublic final void writeChars(String s) throws IOExceptionpublic final void writeUTF(String s) throws IOExceptionpublic final int size()public void flush() throws IOException
Metoda
size()
vraća broj byteova koji su ispisani na izlazni stream.
Klasa
java.io.PrintStream
je podklasa od FilterOutputStream.
Implementirana je u System.out
i System.err.
Omogućuje jednostavan ispis primitivnih vrijednosti, objekata i string literala.
Za konvertiranje znakova u byteove koristi kodiranje koje je na danoj platformi
default.
Ta
klasa će uhvatiti sve iznimke tipa IOException,
Status pogreške možete uvijek doznati pomoću metode checkError().
Ona će vratiti true ako se
greška pojavila, false
inače.
public boolean
checkError()
Ono
što se najviše koristi u ovoj klasi su (overlodaded) metode print() i
println().
Metode