programação distribuída em java aula 02. 2 na aula passada vimos: introdução –o que podemos...

29
Programação Distribuída em Java Aula 02

Upload: octavio-pinheiro-di-azevedo

Post on 07-Apr-2016

212 views

Category:

Documents


0 download

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

29

Na próxima aula veremos:

• Sockets

• ServerSockets