Streams Java Sumrio Streams Emprego Tipos Funcionalidades Data

  • Slides: 20
Download presentation
Streams Java

Streams Java

Sumário • Streams – Emprego – Tipos – Funcionalidades – Data Sink Streams –

Sumário • Streams – Emprego – Tipos – Funcionalidades – Data Sink Streams – Processing Streams – Cadeias de Streams – Classes de Streams 2

Stream • Um programa lê / grava informações de / para um canal •

Stream • Um programa lê / grava informações de / para um canal • Em Java, um canal de onde um programa pode ler ou gravar informações é chamado de Stream 3

Streams • Cada canal capaz de gravar em um destino de dados tem um

Streams • Cada canal capaz de gravar em um destino de dados tem um conjunto de métodos de escrita • Cada canal capaz de ler a partir de uma fonte de dados tem um conjunto de métodos leitura • Quando o stream é criado só temos de invocar esses métodos 4

Input e Output Streams Input Stream Output Stream 5

Input e Output Streams Input Stream Output Stream 5

Emprego de Streams • Na leitura: • construir e abrir um stream • enquanto

Emprego de Streams • Na leitura: • construir e abrir um stream • enquanto há informações – ler as informações • fechar stream • Na gravação: • construir e abrir um stream • enquanto há informações para gravar – gravar informações • fechar stream 6

Tipos de Streams • Existem dois tipos de streams: – Streams de Bytes (classes

Tipos de Streams • Existem dois tipos de streams: – Streams de Bytes (classes *Stream) – Streams de Caracteres (classes *Reader ou *Writer) 7

Cópia de bytes 8

Cópia de bytes 8

Cópia de bytes import java. io. File. Input. Stream; import java. io. File. Output.

Cópia de bytes import java. io. File. Input. Stream; import java. io. File. Output. Stream; import java. io. IOException; public class Copy. Bytes { public static void main(String[] args) throws IOException { File. Input. Stream in = null; File. Output. Stream out = null; try { in = new File. Input. Stream("xanadu. txt"); out = new File. Output. Stream("outagain. txt"); int c; while ((c = in. read()) != -1) { out. write(c); } } finally { if (in != null) { in. close(); } if (out != null) { out. close(); } } 9 } }

Cópia de caracteres import java. io. File. Reader; import java. io. File. Writer; import

Cópia de caracteres import java. io. File. Reader; import java. io. File. Writer; import java. io. IOException; public class Copy. Characters { public static void main(String[] args) throws IOException { File. Reader input. Stream = null; File. Writer output. Stream = null; try { input. Stream = new File. Reader("xanadu. txt"); output. Stream = new File. Writer("characteroutput. txt"); int c; while ((c = input. Stream. read()) != -1) { output. Stream. write(c); } } finally { if (input. Stream != null) { input. Stream. close(); } if (output. Stream != null) { output. Stream. close(); } } 10 } }

Streams • Funcionalmente: – Data Sink (Sumidouro) Streams conectados diretamente com a origem ou

Streams • Funcionalmente: – Data Sink (Sumidouro) Streams conectados diretamente com a origem ou destino – Processing Streams - ligados a outros streams para proporcionar uma maior transparência de processamento (filtragem, compressão, etc. ) 11

Data Sink Streams • Classes: – – File. Reader: lê caracteres de um arquivo.

Data Sink Streams • Classes: – – File. Reader: lê caracteres de um arquivo. File. Writer: grava caracteres em um arquivo. File. Input. Stream: lê bytes de um arquivo. File. Output. Stream: grava bytes em um arquivo. • Data Sink Streams têm apenas métodos simples de leitura / gravação – Ao criar streams Data Sink temos de especificar a fonte • Para arquivos: o nome do arquivo • Para a rede: o socket • A partir de memória: a localização 12

Processing Streams • Processing Streams – Quando se cria um processing stream, temos de

Processing Streams • Processing Streams – Quando se cria um processing stream, temos de especificar a qual stream estará ele ligado • Alguns processing streams: – Data. Input. Stream, Data. Output. Stream, Buffered. Writer, Buffered. Reader, etc. . • Como fazer: – Ligar a um Datastream um File. Stream para gravar / ler outros tipos de dados que não sejam bytes – Ligar a um Buffer. Stream a um Network. Stream para “bufferizar” o acesso à rede 13

Cópia de linhas (com bufferização) 14

Cópia de linhas (com bufferização) 14

Cadeias de Streams – Quando tudo estiver configurado e se desejar gravar um número

Cadeias de Streams – Quando tudo estiver configurado e se desejar gravar um número real em um Data Stream (invocar qualquer método de gravar): • O programa pede ao data stream para gravar algo • O data stream obtém um conjunto de bytes e os grava no buffer stream • O buffer stream retém os bytes até que decida a gravá-los, de uma só vez, no file stream • O file stream efetivamente grava os bytes no arquivo destino sempre que os receber do buffer stream 15

Classes de Streams • Para cada tipo existe um Input. Stream (byte) ou Reader

Classes de Streams • Para cada tipo existe um Input. Stream (byte) ou Reader (char) e um Output. Stream (byte) ou Reader (char) • As classes Stream podem ter sub classes – Pode-se criar seus próprios streams para serem incluído em uma cadeia • Para isto é preciso: – Criar o construtor da classe aceitando um Stream – Adaptar-se aos métodos de leitura / gravação e implementar as funcionalidades desejadas nesses métodos 16

Criação de processing streams • As classes base partir do qual derivam os novos

Criação de processing streams • As classes base partir do qual derivam os novos processing streams são: – Filter. Output. Stream – Filter. Input. Stream – Filter. Reader – Filter. Writer 17

Classes para acesso a arquivos • • A classe Input. Stream. Reader le bytes

Classes para acesso a arquivos • • A classe Input. Stream. Reader le bytes e os decodifica em caracteres Cada invocação do método read() de Input. Stream. Reader's le um ou mais bytes da entrada • Para maior eficiência é conveniente “encapar” a classe Input. Stream. Reader por uma classe Buffered. Reader in = new Buffered. Reader(new Input. Stream. Reader(System. in)); • • 18 A classe Ramdom. Access. File permite leitura e gravação de modo aleatório em arquivos de acesso direto Um ponteiro, posicionado pelo método seek(), indica o ponto de leitura

Declaração de classe para acesso direto File file = new File("Random. Access. File. Example.

Declaração de classe para acesso direto File file = new File("Random. Access. File. Example. out"); Random. Access. File raf = new Random. Access. File(file, "rw"); // Ler primeiro caractere do arquivo byte ch = raf. read. Byte(); System. out. println(“Ler primeiro caractere: " + (char)ch); // Incluir registro no final do arquivo raf. write(0 x 0 A); raf. write. Bytes(“Exemplo terminado"); 19

Exemplos de acessos a arquivos Exemplo 1 (acesso direto) File. Input. Stream stream =

Exemplos de acessos a arquivos Exemplo 1 (acesso direto) File. Input. Stream stream = new File. Input. Stream(". . /EDIIA 32. txt"); Input. Stream. Reader stream. Reader = new Input. Stream. Reader(stream); Buffered. Reader reader = new Buffered. Reader(stream. Reader); Random. Access. File raf = new Random. Access. File (new File(". . /Acesso. Direto. dsk"), "rw"); arq. read(string. Data); arq. write. Int(mpr_periodo); Exemplo 2 (acesso seqüencial) private static Input. Stream. Reader is = new Input. Stream. Reader( System. in ); private static Buffered. Reader br = new Buffered. Reader( is ); Buffered. Reader in = new Buffered. Reader( new Input. Stream. Reader( new File. Input. Stream ( new File(". \dados\ARQ 9502. DAT")))); while (in. ready()) { linha = in. read. Line(); 20