Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos...

Preview:

Citation preview

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– Conceito e exemplos

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

4

Na aula passada vimos:

• Modelo Cliente/Servidor– Formato de interação entre máquinas

5

O que você deve ter fixado:

• Funcionamento básico de uma rede

• Modelo de camadas

• Interação cliente/servidor

6

Na aula de hoje veremos:

• I/O

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

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

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

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()

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

12

java.io.InputStream

• Classe abstrata que fornece os métodos fundamentais para leitura de dados em um meio particular

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

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

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); }

16

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

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

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

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

21

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

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

24

java.io.InputStreamReader

• Análoga a InputStream

• Seus métodos podem ser entendidos comparando-os aos de InputStream

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?

26

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

28

O que você precisa saber...

• Tratamento básico de entrada e saída em Java

• Encadeamento de filtros

29

Na próxima aula veremos:

• Sockets

• ServerSockets

Recommended