Akımlar
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:
InputStream OutputStream Kaynak/Alıcı Tü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:
Yöntem Tanımlama
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:
Yöntem Tanımlama
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.