Vimos aula passada...gregos, vídeo... Idade média... Renascimento... Iluminismo...
Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos...
-
Upload
octavio-pinheiro-di-azevedo -
Category
Documents
-
view
213 -
download
0
Transcript of Programação Distribuída em Java Aula 02. 2 Na aula passada vimos: Introdução –O que podemos...
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