---
title: 'Die Klassen OutputStream und InputStream'
url: 'https://www.tutego.de/blog/javainsel/2017/02/die-klassen-outputstream-und-inputstream'
markdown: 'https://www.tutego.de/blog/javainsel/2017/02/die-klassen-outputstream-und-inputstream.md'
date: '2017-02-19'
description: 'Die abstrakte Basisklasse OutputStream Wenn wir uns den OutputStream anschauen, dann sehen wir auf den ersten Blick, dass hier alle wesentlichen Operationen rund um das Schreiben versammelt sind. Der Clou bei allen Datenströmen ist, dass spezielle Unterklassen wissen, wie sie genau die vorgeschrieb…'
taxonomy:
  category:
    - Allgemein
    - Insel
    - 'Java 9'
---

# Die Klassen OutputStream und InputStream

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://www.tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://www.tutego.de/blog/javainsel/)

## Die Klassen OutputStream und InputStream

19.02.2017 · [Christian Ullenboom](https://www.tutego.de/blog/javainsel/author/admin/)

### Die abstrakte Basisklasse `OutputStream`

Wenn wir uns den `OutputStream` anschauen, dann sehen wir auf den ersten Blick, dass hier alle wesentlichen Operationen rund um das Schreiben versammelt sind. Der Clou bei allen Datenströmen ist, dass spezielle Unterklassen wissen, wie sie genau die vorgeschriebene Funktionalität implementieren. Das heißt, dass ein konkreter Datenstrom, der in Dateien oder in eine Netzwerkverbindung schreibt, weiß, wie Bytes in Dateien oder ins Netzwerk kommen. Und an der Stelle ist Java mit seiner Plattformunabhängigkeit am Ende, denn auf einer so tiefen Ebene können nur native Methoden die Bytes schreiben.

abstract class `java.io.OutputStream`implements `Closeable`, Flushable

- `abstractvoidwrite(intb)``throwsIOException`Schreibt ein einzelnes Byte in den Datenstrom.
- voidwrite(byte\[\]b)`throwsIOException`Schreibt die Bytes aus dem Array in den Strom.
- voidwrite(byte\[\]b,intoff,intlen)`throwsIOException`Schreibt Teile des Byte-Feldes, nämlich len Byte ab der Position off, in den Ausgabestrom.
- `voidclose()``throwsIOException`Schließt den Datenstrom. Einzige Methode aus Closeable.
- `voidflush()``throwsIOException`Schreibt noch im Puffer gehaltene Daten. Einzige Methode aus der Schnittstelle Flushable.

Die `IOException` ist keine `RuntimeException` und muss behandelt werden.

Beispiel: Die Klasse ByteArrayOutputStream ist eine Unterklasse von `OutputStream` und speichert intern alle Daten in einem byte-Array. Schreiben wir ein paar Daten mit den drei gegeben Methoden hinein:

```java
byte[] bytes = { 'O', 'N', 'A', 'L', 'D' };

//                0    1    2    3    4

ByteArrayOutputStream out = new ByteArrayOutputStream();

try {

  out.write( 'D' );          // schreibe D

  out.write( bytes );        // schreibe ONALD

  out.write( bytes, 1, 2 );  // schreibe NA

  System.out.println( out.toString( StandardCharsets.ISO_8859_1.name() )  );

}

catch ( IOException e ) {

  e.printStackTrace();

}
```

#### Über konkrete und abstrakte Methoden \*

Zwei Eigenschaften lassen sich an den Methoden vom `OutputStream` ablesen: zum einen, dass nur Bytes geschrieben werden, und zum anderen, dass nicht wirklich alle Methoden abstract sind und von Unterklassen für konkrete Ausgabeströme überschrieben werden müssen. Nur `write(int)` ist abstrakt und elementar. Das ist trickreich, denn tatsächlich lassen sich die Methoden, die ein Byte-Array schreiben, auf die Methode abbilden, die ein einzelnes Byte schreibt. Wir werfen einen Blick in den Quellcode der Bibliothek:

java/lang/OutputStream,java, Ausschnitt

```

public abstract void write(int b) throws IOException;

 public void write(byte[] b) throws IOException {
   write(b, 0, b.length);
 }

 public void write(byte b[], int off, int len) throws IOException {
   if (b == null) {
     throw new NullPointerException();
   } else if ((off  b.length) || (len  b.length) || ((off + len) 
```

Kategorien: [Allgemein](https://www.tutego.de/blog/javainsel/category/allgemein/), [Insel](https://www.tutego.de/blog/javainsel/category/insel/), [Java 9](https://www.tutego.de/blog/javainsel/category/java-9/)

[← Alle Beiträge](https://www.tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [Google Guava steigt (endlich) auf Java 8 um](https://www.tutego.de/blog/javainsel/2017/02/google-guava-steigt-endlich-auf-java-8-um.md)
- Next: [Deserialisierung absichern mit einem ObjectInputFilter](https://www.tutego.de/blog/javainsel/2017/02/deserialisierung-absichern-mit-einem-objectinputfilter.md)
