Okuyucular ve yazıcılar InputStream ve
OutputStream kullanarak bir kural dışı durumla benzer fonksiyonlar gerçekleştirirler: Bunlar byte yerine karakterlerle çalışırlar. Okuyucular ve yazıcılar sırasıyla karaktere yönelik (yazı tabanlı) girdi ve çıktı akımlar için süper sınıflardır. Bu sınıfların özelleşmiş alt sınıfları farklı türdeki akımlar için gerekli gerçekleştirmeleri sağlar. Bu özelleşmiş alt sınıflardan bazıları şunlardır:
FileReader |
FileWriter |
Diskte bir dosya. Dosya yapılandırıcıya geçirilebilir.
|
CharArrayReader |
CharArrayWriter |
Bellekte bir karakter dizisi. Karakter dizisi türünden bir ara bellek yapılandırıcıya geçirilebilir.
|
StringReader |
StringWriter |
Bellekte dizgi. Bir dizgi StringReader'in yapılandırıcısına geçirilebilir ve bir ilk büyüklük StringWriter'ın yapılandırıcısına geçirilebilir. |
PipedReader |
PipedWriter |
Bir başka iş parçacıcı (karakterleri okumadan/yazmadan önce PipedReader'i PipedWriter'a bağlar). PipedWriter'dan yazılan herşey PipedReader'dan okunabilir.
|
InputStream gibi, Reader (Okuyucu) da karakterleri okumak için üç yöntem tanımlar:
int read() |
Akımdan bir sonraki byte'ı okur. |
int read(char[] b) |
Akımdan k<=b.length karakterleri okur ve okunan karakterlerin sayısını döndürür. Eğer yeterli veri varsa, akım arabellek b'yi doldurur, yoksa akım karakterleri koyar ve b[0]'dan başlayarak okur.
|
int read(char[] b, int offset, int length) |
Akımdan k<=b.length karakterleri okur, bu karakterleri b[offset]'den başlayarak koyar ve okunan karakterlerin sayısını döndürür.
|
Eğer akımın sonuna ulaşılmışsa, okuma yöntemi -1 döndürür. Ayrıca akımdan kaç karakteri okumanın mümkün olduğunu available() yöntemi kullanarak öğrenmek de mümkün.
Writer (Yazıcı) karakter ve dizgileri yazmak için beş yöntem tanımlar:
Void write(int b) |
(char)b'yi akıma yazar. |
void write(char[] b) |
b'deki b.length karakteri akıma yazar. |
void write(char[] b, int offset, int length) |
b'deki length karakteri b[offset]'den başlayarak akıma yazar.
|
void write(String s) |
dizgi s'yi akıma yazar.
|
void write(String s, int offset, int length) |
dizgi s'deki length karakteri, offset posizyonundaki karakterden başlayarak akıma yazar.
|
Diğer Okuyucu ve Yazıcı sınıflarla sarıcı okuyucular ve yazıcılar kullanarak daha yararlı arayüzlere sahip olmak mümkün. Örneğin bir okuyucuyu
BufferedReader ile sararak karakterlere ve karakter dizilerine ek olarak dizgileri de okuyabilirsiniz. Örneğin aşağıdaki kod bir
FileReader'i dizgileri satır satır okumak ve ekrana yazmak için
BufferedReader içinde sarar :
BufferedReader r = new BufferedReader(new FileReader("textfile.txt"));
String s;
while((s=r.readLine())!=null) System.out.println(s);
InputStreamReader ve
OutputStreamWriter sınıfları
InputStreamleri ve
OutputStreamleri yazı tabanlı I/O için Okuyucular ve Yazıcılar içinde sarmak için bir mekanizma sağlar.