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 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.java10 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.java14 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 loop byte[] 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.java22 Readers and Writers Assim como Input e OutputStream usam bytes, readers e writers usam caracteres Unicode veja: 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.java27 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