InputStream ve OutputStream
sırasıyla, girdi ve çıktı akımları için süper sınıflardır. Bu sınıfların özelleştirilmiş alt sınıfları farklı türdeki akımlar için gerekli gerçekleştrimeleri sağlar. Bu özelleştirilmiş alt sınıfların bazıları şunlardır:
FileInputStream |
FileOutputStream |
Diskte bir dosya. Dosya adı yapılandırıcıya geçirilebilir.
|
ByteArrayInputStream |
ByteArrayOutputStream |
Bellekte bir byte dizisi. Byte dizi türünden bir arabellek yapılandırıcıya geçirilebilir. |
PipedInputStream |
PipedOutputStream |
Bir başka iş parçacığı (byte'ları okumadan/yazmadan önce PipedInputStream'i PipedOutputStream'e bağlar). PipedOutputStream'den yazılan herşey PipedInputStream'dan okunabilir.
|
InputStream byte verisini okumak için üç yöntem tanımlar:
int read() |
Akımda bir sonraki byte'ı okur. |
int read(byte[] b) |
Akımdan k<=b.length olan byte'ları okur ve okunan byte sayısını döndürür. Eğer yeterli veri varsa akım b arabelleğini doldurur, yoksa akım b[0]'dan başlayan okunmuş byte'ları koyar. |
int read(byte[] b, int offset, int length) |
Akımdan k<=b.length olan byte'ları okur, ve bunları b[offset]'den başlayarak koyar, ve okunan byte sayısını döndürür.
|
Eğer akımın sonuna ulaşılmışsa, okuma yöntemi -1 döndürür.
available() yöntemi kullanılarak akımdan kaç tane byte okunabileceğini öğrenmek de mümkün.
Benzer şekilde OutputStream veri byte'ları yazmak için üç yöntem tanımlar:
void write(int b) |
(byte)b'yi akıma yazar. |
void write(byte[] b) |
b'deki b.length kadar byte'ı akıma yazar. |
void write(byte[] b, int offset, int length) |
b'deki uzunluk byte'larını b[offset]'den başlayarak akıma yazar.
|
Aşağıda, diskteki bir dosyayı akımlar kullanarak yeni bir dosyaya kopyalayan basit bir kod gösterilmektedir:
import java.io.*;
public class CopyFile {
public static void main(String[] args) throws IOException{
FileInputStream in = new FileInputStream("input.txt");
FileOutputStream out = new FileOutputStream("output.txt");
byte b[] = new byte[8192];
int length;
while((length = in.read(b))>0) out.write(b, 0, length);
in.close();
out.close();
}
}
Akımla ilgili operasyonların
IOException üretebileceklerine dikkat ediniz. Bu yüzden ya
IOExceptions'i işlemelisiniz yada yöntem bildirimi içinde
IOExceptions'i belirtmelisiniz.