Classes derivadas de InputStream

fonte: The Java Tutorial

Algumas das principais subclasses de InputStream, parte do pacote java.io, são aquelas que determinam a origem dos dados. São elas:

FileInputStream
Bytes são originários de um arquivo; usualmente, usado em conjunto com BufferedInputStream e DataInputStream;
ByteArrayInputStream
Valores são originários de um arranjo de bytes, ou seja, de uma área em memória.
PipedInputStream
Oferece a funcionalidade de leitura de um pipe de bytes cuja origem está associada a um objeto PipedOutputStream;

Além dessas, outras classes do pacote java.io derivadas de InputStream são aquelas que agregam alguma funcionalidade à leitura dos dados. Por exemplo, para interpretar os bytes lidos como valores dos tipos primitivos da linguagem Java é possível combinar o objeto InputStream (de qualquer dos tipos acima) com um objeto DataInputStream. Similarmente, para ler uma representação binária de um objeto previamente serializado (ver serialização), usa-se um objeto da classe ObjectInputStream.