Deo zbornika Učimo Javu
Izlazni tok
Klasa OutputStream
šalje čiste bajtove podataka na neko odredište, npr. konzolu ili mrežni server. Ova je klasa apstraktna, isto kao i InputStream
.
Metode
Mnoge metode u biblioteci Java klasa napravljene su tako da vraćaju objekte tipa OutputStream
, umjesto objekte iz njenih specifičnih podklasa. Mnoge metode klase OutputStream
su općenito korisne. To su:
public abstract void write(int b) throws IOException
public void write(byte[] data) throws IOException
public void write(byte[] data, int offset, int length) throws IOException
public void flush() throws IOException
public void close() throws IOException
Nekoliko različitih write()
metoda šalju čiste bajtove podataka svakom procesu koji osluškuje dati tok.
Ponekad operacijski sustav gomila izlazne tokove (“baferuje strim”) zbog boljih performansi. To znači da se bajtovi prije ispisa akumuliraju u spremnik (bafer), čija veličina može biti od nekoliko bajtova do nekoliko tisuća bajtova. 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 se ovdje radi o procesu na razini operacijskog sustava, i ovo nije isto što i taloženje koje provodi klasa BufferedOutputStream
, koje izvodi Java runtime. Međutim, poziv metode flush()
trebao bi isprazniti oba spremnika.
Metoda close()
zatvara tok i otpušta resurse koji su s njim povezani. Jednom kad je tok zatvoren, pokušaj pisanja u njega izbacit će IOException
.
Primjer izlaznog toka
Izlazni tokovi koje ste do sad upoznali su System.out
i System.err
. Sljedeći primjer koristi metode write()
i 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";
byte[] b = new byte[s.length()]; // prevodi u niz bajtova
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 (napomena: ovaj primer je zastareo).