• Nenhum resultado encontrado

Streams. Streams. Tipos: Utilizac~ao:

N/A
N/A
Protected

Academic year: 2021

Share "Streams. Streams. Tipos: Utilizac~ao:"

Copied!
13
0
0

Texto

(1)

Streams

I

Streams

I

Streams de entrada/sada

I

Streams para acesso a cheiros

I

sockets

I

ltros

I

serializac~ao de objectos

I

exemplos

Rui Camacho Complementos de Programac~ao e Algoritmos { LEIC

Apresentac~ao Java { conceitos Basicos

Java { topicos espec cos

Streams

Abstracc~ao do Java para tratar qualquer fonte ou destino de dados e que

e independente de dispositivos fsicos concretos. A leitura/escrita em

streams e sequencial. Uma stream funciona como a ligac~ao a um canal de

comunicac~ao para qualquer dispositivo (disco, teclado, ecr~a, rede, etc)

Tipos:

I

streams de caracteres, ou streams de texto

I

streams de byte, ou streams binarias

Utilizac~ao:

I

input streams | leitura de dados

I

output streams | escrita de dados

(2)

Streams em Java

de \Advanced Java Networking", Prashant Sridharan

Rui Camacho Complementos de Programac~ao e Algoritmos { LEIC

Apresentac~ao Java { conceitos Basicos

Java { topicos espec cos

Streams em Java

de \Java Network Programming, M. Hughes et al.

(3)

Streams em Java

de \Java Network Programming, M. Hughes et al.

Rui Camacho Complementos de Programac~ao e Algoritmos { LEIC

Apresentac~ao Java { conceitos Basicos

Java { topicos espec cos

Streams

{ classes de java.io {

Classes de E/S usando streams s~ao subclasses das classes

abstractas da package java.io:

I

InputStream | leitura de byte

I

OutputStreams | escrita de byte

I

Reader | leitura de caracteres

I

Writer | escrita de caracteres

(4)

Classes da package java.io

de \POO em JAVA", F. Mario Martins

Rui Camacho Complementos de Programac~ao e Algoritmos { LEIC

Apresentac~ao Java { conceitos Basicos

Java { topicos espec cos

Leitura do teclado { exemplo

public class Consola f

public static String leStr() f // le uma String int ch; String r = ""; while (true) f try f ch = System.in.read(); if (ch < 0 jj ch == 27 jj ch == 13 jj ch == 10)f //ESC ou CR if (ch == 27) f // se for ESC tem que consumir o CR/LF !!

ch = System.in.read(); ch = System.in.read(); g

// if (ch == 13) // se for CR tem que consumir o LF !! // ch = System.in.read(); return r; g else r = r + (char) ch; g catch(java.io.IOException e) freturn r;g g g

de \POO em JAVA", F. Mario Martins

(5)

Leitura do teclado

(cont.)

public static int leInt() f // le um inteiro

while(true)f

tryf

return Integer.valueOf(leStr().trim()).intValue();

g

catch(NumberFormatException e)

f System.out.println("Nao e um numero inteiro !!"); g

g

g

public static double leDouble() f // le um Double

while(true)f

tryf

return Double.valueOf(leStr().trim()).doubleValue();

g

catch(NumberFormatException e)

f System.out.println("Nao e um numero em VF !!"); g

g

g

de \POO em JAVA", F. Mario Martins

Rui Camacho Complementos de Programac~ao e Algoritmos { LEIC

Apresentac~ao Java { conceitos Basicos

Java { topicos espec cos

Leitura do teclado

(cont.)

// le um booleano

public static boolean leBool() f

while(true)f

tryf

String s = leStr().trim().toLowerCase();

if ( s.equals("true") jj s.equals("false"))

return Boolean.valueOf(s).booleanValue();

else

throw new IllegalArgumentException("");

g

catch(IllegalArgumentException e)

f System.out.println("Nao e um Booleano "); g

g

g

g

(6)

Leitura de Ficheiro |

leitura de inteiros

import java.io.*;

public class LerDeFicheiro f private Bu eredReader cheiro; private String linha;

public void leDeFicheiro(String NomeDoFicheiro)f try f

cheiro = new Bu eredReader(new FileReader(NomeDoFicheiro)); while(true)f linha = cheiro.readLine(); if(linha == null)f cheiro.close(); break; g System.out.println("LINHA: "+linha); g g catch (FileNotFoundException e) f

System.out.println("Ficheiro "+NomeDoFicheiro+" nao existe"); g

catch(IOException e)f

System.out.println("ERRO na leitura do cheiro"); g

g g

Rui Camacho Complementos de Programac~ao e Algoritmos { LEIC

Apresentac~ao Java { conceitos Basicos

Java { topicos espec cos

Escrita em Ficheiro { exemplo

package chapman.io; import java.io.*; import chapman.io.Fmt; public class FileOut f

private PrintWriter out; // referencia para PrintWriter public nal int WRITE OK = 0; // escrita com sucesso public nal int IO EXCEPTION = -999; // excepcao de E/S public int writeStatus; // estado da operacao de escrita public FileOut(String leName)f

tryf out = new PrintWriter(new Bu eredWriter(new FileWriter( leName,false))); g

catch (IOException e) fwriteStatus = IO EXCEPTION;g g

public FileOut(String leName, boolean append)f

tryf out = new PrintWriter(new Bu eredWriter( new FileWriter( leName,append))); g

catch(IOException e)f writeStatus = IO EXCEPTION;g g

//usage: out.printf("Time = %8.2f snn",time); public void printf(String fmt, double x) f

out.print(Fmt.sprintf(fmt,x)); writeStatus = WRITE OK; g

de \Java for Engineers and Scientists", S. J. Chapman

(7)

Escrita em Ficheiro

{ exemplo II {

//usage: out.printf("string = %snn",s);

public void printf(String fmt, String s) f

out.print(Fmt.sprintf(fmt,s));

writeStatus = WRITE OK;

g

public void close() f

out.close(); // fecha o cheiro de entrada

g

protected void nalize() f

try f

out.close();

super. nalize();

g

catch(Throwable e)f System.out.println("Throwable");g

g

g

de \Java for Engineers and Scientists", S. J. Chapman

Rui Camacho Complementos de Programac~ao e Algoritmos { LEIC

Apresentac~ao Java { conceitos Basicos

Java { topicos espec cos

classe File

(java.io)

N~ao e uma stream. Disponibiliza metodos para as habituais

operac~oes sobre cheiros e directorios

I

isFile() | testar se e cheiro

I

isDirectory() | veri car se e directorio

I

getPath() | caminho ate ao directorio do cheiro

I

length | tamanho do cheiro

I

delete() | remover o cheiro

I

renameTo() | mudar o nome

I

list() | listar directorio

(8)

Sockets:

exemplo de um servidor

import java.net.*; import java.io.*; class Servidor f

static int porta = 1234;

public static void main(String args[]) f ServerSocket server;

Socket socket;

DataInputStream input; PrintStream output; String line;

try f server = new ServerSocket(porta); g

catch(Exception e) f System.err.println(\Nao posso ouvir a porta \+porta); return; g while(true) f

try f

socket = server.accept();

input = new DataInputStream(socket.getInputStream()); output = new PrintStream(socket.getOutputStream()); g

catch(IOException e) f System.err.println(\Erro na criacao do socketnn"+e.getMessage()); break; g try f line = input.readLine(); g

catch(IOException e) f System.err.println("Erro na leitura do socket"); output.close(); continue; g output.print(\Recebi:nn|nn"+line+"nn|"); output.close(); g g

g Rui Camacho Complementos de Programac~ao e Algoritmos { LEIC

Apresentac~ao Java { conceitos Basicos

Java { topicos espec cos

Sockets:

exemplo de um cliente

import java.net.*; import java.io.*; class Cliente f

static String maquina = "localhost"; static int porta = 1234;

public static void main(String arg[]) f Socket socket;

DataInputStream input; PrintStream output; String line;

try f socket = new Socket(maquina,porta);g catch(Exception e) f

System.err.println(\Err porta \+porta+" em \+maquina); return; g try f

input = new DataInputStream(socket.getInputStream()); output = new PrintStream(socket.getOutputStream()); g

catch(Exception e) f System.err.println(\Falhou ligacao"); return; g for(int i=0; i < arg.length; i++) output.print(arg[i]+" ");

output.println(""); output. ush(); try f

while((line=input.readLine()) != null) System.out.println(line); g

catch(Exception e) f System.err.println(\Erro I/0"); return; g g

(9)

Con gurac~oes tpicas de streams para E-S

import java.io.*;

public class IOStreamDemo f

public static void main(String[] args) throws IOException f

// 1. Reading input by lines:

Bu eredReader in = new Bu eredReader(new FileReader("IOStreamDemo.java")); String s, s2 = new String();

while((s = in.readLine())!= null) s2 += s + "nn";

in.close();

// 1b. Reading standard input:

Bu eredReader stdin = new Bu eredReader(new InputStreamReader(System.in)); System.out.print("Enter a line:");

System.out.println(stdin.readLine()); // 2. Input from memory

StringReader in2 = new StringReader(s2); int c;

while((c = in2.read()) != -1) System.out.print((char)c); // 3. Formatted memory input try f

DataInputStream in3 = new DataInputStream( new ByteArrayInputStream(s2.getBytes())); while(true) System.out.print((char)in3.readByte());

g

catch(EOFException e)fSystem.err.println("Eof stream"); g

de \'Thinking in Java", Bruce EckelRui Camacho Complementos de Programac~ao e Algoritmos { LEIC

Apresentac~ao Java { conceitos Basicos

Java { topicos espec cos

Con gurac~oes tpicas de streams para E-S

// 4. File output try f

Bu eredReader in4 = new Bu eredReader(new StringReader(s2));

PrintWriter out1 = new PrintWriter( new Bu eredWriter(new FileWriter("IO.out"))); int lineCount = 1;

while((s = in4.readLine()) != null ) out1.println(lineCount++ + ": " + s); out1.close();

g

catch(EOFException e)fSystem.err.println("Eof stream");g // 5. Storing & recovering data

try f

DataOutputStream out2 = new DataOutputStream( new Bu eredOutputStream(new FileOutputStream("Data.txt"))); out2.writeDouble(3.14159);

out2.writeUTF("That was pi"); out2.writeDouble(1.41413);

out2.writeUTF("Square root of 2"); out2.close();

DataInputStream in5 = new DataInputStream(new Bu eredInputStream( new FileInputStream("Data.txt"))); // Must use DataInputStream for data:

System.out.println(in5.readDouble());

// Only readUTF() will recover the Java-UTF String properly: System.out.println(in5.readUTF());

// Read the following double and String: System.out.println(in5.readDouble()); System.out.println(in5.readUTF()); g

(10)

Con gurac~oes tpicas de streams para E-S

// 6. Reading/writing random access les

RandomAccessFile rf = new RandomAccessFile("rtest.dat", "rw");

for(int i = 0; i < 10; i++)

rf.writeDouble(i*1.414);

rf.close();

rf = new RandomAccessFile("rtest.dat", "rw");

rf.seek(5*8);

rf.writeDouble(47.0001);

rf.close();

rf = new RandomAccessFile("rtest.dat", "r");

for(int i = 0; i < 10; i++)

System.out.println("Value " + i + ": " +

rf.readDouble());

rf.close();

g

g

de \'Thinking in Java", Bruce Eckel

Rui Camacho Complementos de Programac~ao e Algoritmos { LEIC

Apresentac~ao Java { conceitos Basicos

Java { topicos espec cos

Compress~ao de cheiros usando GZIP

import java.util.zip.*; public class GZIPcompress f

public static void main(String[] args) throws IOException f

Bu eredReader in = new Bu eredReader(new FileReader(args[0]));

Bu eredOutputStream out = new Bu eredOutputStream(new GZIPOutputStream( new FileOutputStream("test.gz")));

System.out.println("Writing le"); int c;

while((c = in.read()) != -1) out.write(c); in.close();

out.close();

System.out.println("Reading le");

Bu eredReader in2 = new Bu eredReader(new InputStreamReader(new GZIPInputStream( new FileInputStream("test.gz"))));

String s;

while((s = in2.readLine()) != null) System.out.println(s);

g g

de \'Thinking in Java", Bruce Eckel

(11)

Serializac~ao de objectos

I

Permite o armazenamento e recuperac~ao de objectos em cheiros.

I

Permite enviar e receber objectos atraves de uma linha de comunicac~ao.

Implementac~ao de persist^encia de objectos.

I

Usado, por exemplo, em RMI para enviar objectos a metodos remotos.

I

Os objectos s~ao codi cados numa sequ^encia de caracteres.

I

E guardada a estrutura da classe juntamente com os valores dos seus

membros.

I

Quando ha ligac~oes a outros objectos as rotinas de serializac~ao

automaticamente serializam os objectos referidos no objecto a serializar.

I

S~ao evitados ciclos de refer^encias entre objectos

Rui Camacho Complementos de Programac~ao e Algoritmos { LEIC

Apresentac~ao Java { conceitos Basicos

Java { topicos espec cos

Serializac~ao de objectos

Escrita

I

classe ObjectOutputStream

I

metodo writeObject

Leitura

I

classe ObjectInputStream

I

metodo readObject

I

Caso a aplicac~ao queira aplicar encriptac~ao tem que sobrep^or os metodos

de escrita e leitura.

I

usar private transient class ... quando n~ao queremos a serializac~ao de um

(12)

Serializac~ao de objectos

import java.io.*;

class Data implements Serializable f private int i;

Data(int x) f i = x; g public String toString() f

return Integer.toString(i); g

g

public class Worm implements Serializable f // Generate a random int value:

private static int r() f

return (int)(Math.random() * 10); g

private Data[] d = fnew Data(r()), new Data(r()), new Data(r())g; private Worm next;

private char c;

// Value of i == number of segments Worm(int i, char x) f

System.out.println(" Worm constructor: " + i); c = x;

if({i > 0) next = new Worm(i, (char)(x + 1)); g

Worm() f

System.out.println("Default constructor"); g

public String toString() f String s = ":" + c + "(";

for(int i = 0; i < d.length; i++) s += d[i].toString(); s += ")";

if(next != null) s += next.toString(); return s;

g

de \'Thinking in Java", Bruce Eckel

Rui Camacho Complementos de Programac~ao e Algoritmos { LEIC

Apresentac~ao Java { conceitos Basicos

Java { topicos espec cos

Serializac~ao de objectos

public static void main(String[] args) throws ClassNotFoundException, IOException f Worm w = new Worm(6, 'a');

System.out.println("w = " + w);

ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream("worm.out")); out.writeObject("Worm storage");

out.writeObject(w);

out.close(); // Also ushes output

ObjectInputStream in = new ObjectInputStream( new FileInputStream("worm.out")); String s = (String)in.readObject();

Worm w2 = (Worm)in.readObject(); System.out.println(s + ", w2 = " + w2);

ByteArrayOutputStream bout = new ByteArrayOutputStream(); ObjectOutputStream out2 = new ObjectOutputStream(bout); out2.writeObject("Worm storage");

out2.writeObject(w); out2. ush();

ObjectInputStream in2 = new ObjectInputStream( new ByteArrayInputStream(bout.toByteArray())); s = (String)in2.readObject();

Worm w3 = (Worm)in2.readObject(); System.out.println(s + ", w3 = " + w3); g

g

de \'Thinking in Java", Bruce Eckel

(13)

Possvel resultado

Worm constructor: 6

Worm constructor: 5

Worm constructor: 4

Worm constructor: 3

Worm constructor: 2

Worm constructor: 1

w = :a(262) :b(100) :c(396) :d(480) :e(316) :f(398)

Worm storage, w2 = :a(262) :b(100) :c(396) :d(480) :e(316) :f(398)

Worm storage, w3 = :a(262) :b(100) :c(396) :d(480) :e(316) :f(398)

de \'Thinking in Java", Bruce Eckel

Referências

Documentos relacionados

butila = 1) : Não há dados disponíveis Ponto de fusão : Não há dados disponíveis Ponto de solidificação : Não há dados disponíveis Ponto de ebulição : Não há

sistema de estágio, nos prazos estabelecidos pelo professor orientador com assinatura do supervisor de estágio e carimbo da empresa/instituição concedente. Cumprir os

REZAMOS 3 AVÉ MARIA POR HONRA E GLÓRIA DE NOSSA SENHORA, PELO SANTO PADRE, PELAS SUAS INTENÇÕES E PELA UNIÃO DAS FAMÍLIAS NO MUNDO, PELA ALEGRIA DE CADA NOVA VIDA, E PELA CERTEZA

Por essa razão, discutir gênero na escola é uma forma de ampliar o debate acerca des- sa problemática, contribuindo para apro- fundar os debates sobre essa questão e es- timular

O processo de composição de palavras, de acordo com Nunes (1945: 386), provém do fato de nosso espírito juntar, a uma idéia geral, uma particular que a restringe. A idéia

Milhares de combinações serão selecionadas pois você colocou pouquíssimos critérios(FILTROS). Como você NÃO vai jogar milhares de combinações você pode neste

Portar, deter, adquirir, fornecer, receber, ter em depósito, transportar, ceder, ainda que gratuitamente, emprestar, remeter, empregar, manter sob guarda ou ocultar arma

Para isso, os acadêmicos responderam a um questionário investigativo, composto por afirmativas referentes à utilização de temas no ensino e questões objetivas sobre os