java básico :: stream
DESCRIPTION
Material do curso de Java Básico da WBezerra. Como utilizar Streams em Java e quais as implementações deste recurso são fornecidas pelo sdk.TRANSCRIPT
![Page 1: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/1.jpg)
Java Básico Java I/O com Stream
Prof. Wesley R. Bezerra
![Page 2: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/2.jpg)
Roteiro
• O que é stream?
• As interfaces de I/O
• Principais subclasses
• Exercício
• Conclusão
![Page 3: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/3.jpg)
Objetivo
• Conhecer melhor a hierarquia de classes que trabalham com stream
![Page 4: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/4.jpg)
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.
![Page 5: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/5.jpg)
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.
![Page 6: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/6.jpg)
![Page 7: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/7.jpg)
Principais subclasses
de InputStream
• ByteArrayInputStream
• FileInputStream
• FilterInputStream
• BufferedInputStream
• DataInputStream
• PushbackInputStream
• ObjectInputStream
• PipedInputStream
• SequenceInputStream
![Page 8: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/8.jpg)
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.
![Page 9: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/9.jpg)
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.
![Page 10: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/10.jpg)
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.
![Page 11: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/11.jpg)
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.
![Page 12: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/12.jpg)
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.
![Page 13: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/13.jpg)
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.
![Page 14: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/14.jpg)
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.
![Page 15: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/15.jpg)
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.
![Page 16: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/16.jpg)
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.
![Page 17: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/17.jpg)
Principais interfaces de
OutputStream
• ByteArrayOutputStream
• FileOutputStream
• FilterOutputStream
• BufferedOutputStream
• DataOutputStream
• PrintStream
• ObjectOutputStream
• PipedOutputStream
![Page 18: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/18.jpg)
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();
![Page 19: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/19.jpg)
FileOutputStream
• É a classe utilizada para escrever dados em um arquivo(File) ou em um descritor de arquivo (FileDescriptor).
![Page 20: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/20.jpg)
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.
![Page 21: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/21.jpg)
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.
![Page 22: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/22.jpg)
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.
![Page 23: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/23.jpg)
PrintStream
• Esta classe adiciona a outro stream de saída a funcionalidade de imprimir representações de vários valores de dados.
![Page 24: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/24.jpg)
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.
![Page 25: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/25.jpg)
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.
![Page 26: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/26.jpg)
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?
![Page 27: Java Básico :: Stream](https://reader034.vdocuments.pub/reader034/viewer/2022050721/559e7b3d1a28abd8318b473d/html5/thumbnails/27.jpg)
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.