programação distribuída em java aula 02. 2 na aula passada vimos: introdução –o que podemos...
TRANSCRIPT
![Page 1: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/1.jpg)
Programação Distribuída em Java
Aula 02
![Page 2: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/2.jpg)
2
Na aula passada vimos:
• Introdução– O que podemos fazer na rede
• Conceito de Rede– Máquinas conectadas
• Protocolos– Conceito e exemplos
![Page 3: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/3.jpg)
3
Na aula passada vimos:
• Modelo ISO/OSI– Aplicação– Apresentação– Sessão– Transporte– Rede– Enlace– Física
• TCP/IP– Uma simplificação do OSI
![Page 4: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/4.jpg)
4
Na aula passada vimos:
• Modelo Cliente/Servidor– Formato de interação entre máquinas
![Page 5: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/5.jpg)
5
O que você deve ter fixado:
• Funcionamento básico de uma rede
• Modelo de camadas
• Interação cliente/servidor
![Page 6: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/6.jpg)
6
Na aula de hoje veremos:
• I/O
![Page 7: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/7.jpg)
7
I/O
• A maior parte do que um programa em rede faz é simples entrada e saída
• Ler a informação enviada por um servidor é muito parecido com a leitura de um arquivo do sistema local
![Page 8: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/8.jpg)
8
I/O
• I/O em Java é basicamente manipulação de streams
• Depois que um stream é criado podemos até ignorar o seu tipo original graças ao polimorfismo
![Page 9: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/9.jpg)
9
java.io.OutputStream
• Classe abstrata que fornece os métodos fundamentais para escrita de dados em um meio particular
• Todas as subclasses de OutputStream têm o mesmo comportamento– Se você sabe usar a superclasse deverá entender o
funcionamento das subclasses
![Page 10: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/10.jpg)
CharGenerator.java 10
java.io.OutputStream
• Métodos básicos:– public abstract void write (int b) trows IOException– public abstract void write (byte [] data) trows IOException– public abstract void write (byte [] data, int offset, int length )
trows IOException
– public void flush() trows IOException
– public void close()
![Page 11: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/11.jpg)
11
java.io.OutputStream
• Quando utilizar o método flush() sobre OutputStreams?
• Sempre!
• Streams podem ser armazenados em buffer
• flush força o envio de dados que do contrário seriam perdidos
![Page 12: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/12.jpg)
12
java.io.InputStream
• Classe abstrata que fornece os métodos fundamentais para leitura de dados em um meio particular
![Page 13: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/13.jpg)
13
java.io.InputStream
• Métodos básicos:
– public abstract read()– public int read (byte[] input)– public int read (byte[] input, int offset, int length) – public long skip()– public int available()– public void close()
– Todos lançam IOException
![Page 14: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/14.jpg)
SaveLoad.java 14
java.io.InputStream
• read () bloqueia a execução do programa até que um byte esteja disponível
• Entrada e saída tendem a ser processos lentos
• É recomendável que ocorram em threads dedicadas
![Page 15: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/15.jpg)
15
java.io.InputStream• Para garantir que todos os bytes sejam lidos
você deve colocar read() em loopbyte[] input = new byte[1024];int bytesRead = in.read(input);
int bytesRead = 0; int bytesToRead = 1024; byte[] input = new byte[bytesToRead]; while( bytesRead < bytesToRead ) { bytesRead += in.read(input, bytesRead, bytesToRead – bytesRead); }
![Page 16: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/16.jpg)
16
![Page 17: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/17.jpg)
17
Filter Streams
• Input e OutputStream permitem apenas a inscrição e leitura de bytes... e só
• Devido à existência de formatos de dados muito comuns, existem classes que dão tratamento especializado para os mesmos
![Page 18: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/18.jpg)
18
Filter Streams
• Filtros manipulam streams fazendo compressão, criptografia, conversão para caracteres, buffer e etc...
• Filtros podem modificar os dados enquanto são lidos ou escritos– e.g. filtro de compressão ou criptografia
![Page 19: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/19.jpg)
19
Filter Streams
• Vários filtros podem ser encadeados
• Na maioria das vezes devemos usar o último filtro da cadeia para ler ou escrever dados
![Page 20: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/20.jpg)
20
Filter Streams
FileInputStream fis = new FileInputStream(data.txt);BufferedInputStream bis = new BuferredInputStream(fis);DataInputStream dis = new DataInputStream(bis);
Mas quem fará a leitura?
InputStream in = new FileInputStream(data.txt);in = new BuferredInputStream(in);in = new DataInputStream(in);in.read();
Essa é uma melhor opção
![Page 21: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/21.jpg)
21
![Page 22: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/22.jpg)
ListIt.java 22
Readers and Writers
• Assim como Input e OutputStream usam bytes, readers e writers usam caracteres Unicodeveja: http://pt.wikipedia.org/wiki/Unicode
• São chamadas “classes espelho”, pois têm basicamente os mesmos métodos que InputStream e OutputStream
![Page 23: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/23.jpg)
23
java.io.OutputStreamWriter
• Recebe caracteres Unicode e os converte para bytes
• É análoga a OutputStream
• Como exercício compare os métodos dessa classe com os de OutputStream
![Page 24: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/24.jpg)
24
java.io.InputStreamReader
• Análoga a InputStream
• Seus métodos podem ser entendidos comparando-os aos de InputStream
![Page 25: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/25.jpg)
25
InputStreamReader
GZIPInputStream
CipherInputStream
BufferedInputStream
TelnetInputStream
Network
Application
Suponha que você receba dados compactados e criptografados.
Qual seriam os passos para tratar esses dados desde que chegam da rede até que possam ser lidos?
![Page 26: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/26.jpg)
26
![Page 27: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/27.jpg)
Save and Load.java 27
In short:
• Obtenha um stream
• Trate-o com um filtro apropriado
• Conclua a sua manipulação com um reader ou writer
![Page 28: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/28.jpg)
28
O que você precisa saber...
• Tratamento básico de entrada e saída em Java
• Encadeamento de filtros
![Page 29: Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos](https://reader035.vdocuments.pub/reader035/viewer/2022070507/5706384c1a28abb8238f6233/html5/thumbnails/29.jpg)
29
Na próxima aula veremos:
• Sockets
• ServerSockets