Java Básico :: Stream
-
Upload
wesley-r-bezerra -
Category
Education
-
view
107 -
download
3
description
Transcript of Java Básico :: Stream
Java Básico Java I/O com Stream
Prof. Wesley R. Bezerra
Roteiro
• O que é stream?
• As interfaces de I/O
• Principais subclasses
• Exercício
• Conclusão
Objetivo
• Conhecer melhor a hierarquia de classes que trabalham com stream
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.
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.
Principais subclasses
de InputStream
• ByteArrayInputStream
• FileInputStream
• FilterInputStream
• BufferedInputStream
• DataInputStream
• PushbackInputStream
• ObjectInputStream
• PipedInputStream
• SequenceInputStream
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.
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.
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.
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.
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.
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.
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.
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.
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.
Principais interfaces de
OutputStream
• ByteArrayOutputStream
• FileOutputStream
• FilterOutputStream
• BufferedOutputStream
• DataOutputStream
• PrintStream
• ObjectOutputStream
• PipedOutputStream
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();
FileOutputStream
• É a classe utilizada para escrever dados em um arquivo(File) ou em um descritor de arquivo (FileDescriptor).
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.
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.
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.
PrintStream
• Esta classe adiciona a outro stream de saída a funcionalidade de imprimir representações de vários valores de dados.
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.
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.
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?
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.