4. O que é stream?
• Stream é um modo de comunicação de dados, através de
um fluxo de bytes. A palavra stream significa corrente,
torrente, canal.
5. As interfaces de I/O
• Existem duas interfaces padrões no topo da hierarquia
das classes utilizadas para trabalhar com stream. São
elas:
InputStream
• Utilizada para que o programa tenha um stream de entrada
de dados
OutputStream
• Utilizada para que o programa tenho um stream de saida de
dados.
• Obs: out e in são sempre do ponto de vista do programa,
não do recurso.
8. ByteArrayInputStream
• Esta classe contem um buffer interno que armazena os
bytes que podem ser lidos da stream. Um contador
interno manter a referencia para o próximo byte a ser
fornecido para o método read.
9. FileInputStream
• É uma classe utilizada para obter entradas de byte de
um arquivo no file system. Ele poderá ler os arquivos de
acordo com o ambiente onde deve será utilizado.
10. FilterInputStream
• É uma classe que contem algum outro stream de
entrada, o qual é utilizado como sua fonte básica de
dados, possibilitando a transformação dos dados ao
longo do caminho ou provendo funcionalidades
adicionais.
11. BufferedInputStream
• Esta classe adiciona funcionalidade a outro stream de
entrada, a habilidade para fazer um buffer da entrada
para suporte a métodos para marcação e reset.
• Quando o BufferedInputStream é criado, um buffer array
interno também é criado.
12. DataInputStream
• Uma classe deste tipo permite a aplicação ler dados de
tipos primitivos de um stream de entrada subjacente de
um modo independente de maquina.
13. PushbackInputStream
• Esta classe adiciona funcionalidades a outro stream
de entrada, isto é, a habilidade para “pushback” ou
“unread” um byte.
• Isto é útil em situações onde é conveniente a um
fragmento de código ler um numero indefinido de
bytes que são delimitados por um byte de valor
particular; depois de ler o byte de finalização, o
fragmento de código pode “unread” (“des-ler”)
este, então a próxima operação pode ler novamente
o byte que foi devolvido.
14. ObjectInputStream
• Esta classe desserializa dados primitivos e objetos
preveamente escritos utilizando um
ObjectOutputStream.
• ObjectOutputStream e ObjectInputStream podem prover
a aplicação meios de persistir seus objetos.
15. PipedInputStream
• Esta classe deve ser conectada a um PipedInputStream;
o stream de entrada piped entao prove qualquer byte de
dado que seja escrito no stream de saida piped.
• Tipicamente, os dados são lidos do objeto
PipedInputStream por uma thread e os dados no
PipedOutputStream correspondentes são escritos por
outra.
16. SequenceInputStream
• Esta classe representa uma concatenação lógica de
outros streams de entrada.
• Inicia com uma coleção ordenada de streams de entrada
e leitores do inicio ate o fim do arquivo ser atingido,
após isto lê do segundo e assim por diante, ate o fim do
arquivo ser achado no ultimo stream de entrada contido.
18. ByteArrayOutputStrea
m
• Esta classe implementa um stream de saída no qual os
dados são escritos em um array de bytes. O buffer
cresce automaticamente de acordo com a escrita dos
dados. Os dados podem ser resgatados utilizando
toByteArray() e toString();
19. FileOutputStream
• É a classe utilizada para escrever dados em um
arquivo(File) ou em um descritor de arquivo
(FileDescriptor).
20. FilterOutputStream
• É a superclasse de todos os streams de saída com
filtros. Este stream é utilizado sobre um stream de saída
o qual é usado como escoadouro de dados, mas
possibilitando a transformar os dados ao longo do
caminho ou provendo funcionalidades adicionais.
21. BufferedOutputStream
• Através desta classe uma aplicação pode ler bytes de
outro stream de saída sem precisar fazer uma chamada
no sistema para cada byte escrito.
22. DataOutputStream
• Esta classe permite a aplicação escrever dados dos
tipos primitivos do java, um stream de saída “portável”.
• Uma aplicação pode então usar um DataInputStream
para ler os dados novamente.
23. PrintStream
• Esta classe adiciona a outro stream de saída a
funcionalidade de imprimir representações de vários
valores de dados.
24. ObjectOutputStream
• Esta classe escreve tipos de dados primitivos e objetos
em um stream de saída. Os objetos podem ser lidos
(reconstituídos) usando um ObjectInputStream.
25. PipedOutputStream
• Um stream de saída piped pode ser conectado a um
stream de entrada para criar uma comunicação
“conectada”.
• Para entender melhor leia o slide de PipedInputStream.
26. Exercício
• Faça um programa que serialize objetos e os salve em
disco.
• Faça um socket que envie dados primitivos e que possa
ser utilizado por um socket em outra linguagem.
• Para que serve um PipedInputStream e um
PipedOutputStream?
27. Conclusão
• Existem muitas diferente classes dentro da hierarquia do
InputStream e OutputStream, é sempre bom
conhecermos melhor as suas características individuais
para saber quando é melhor utilizar uma ou outra
subclasse.