• Nenhum resultado encontrado

if992 02 Arquivos Fluxos Serializacoes de Objetos

N/A
N/A
Protected

Academic year: 2021

Share "if992 02 Arquivos Fluxos Serializacoes de Objetos"

Copied!
49
0
0

Texto

(1)

Arquivos,  fluxos  e      

serialização  de  objetos  

Sistemas  de  Informação  

Prof.  Vinicius  Cardoso  Garcia  

vcg@cin.ufpe.br  

(2)

Licença  do  Material  

Este  Trabalho  foi  licenciado  com  uma  Licença  

CreaKve  Commons  -­‐  Atribuição-­‐NãoComercial-­‐

ComparKlhaIgual  3.0  Não  Adaptada

.  

 

Mais  informações  visite  

(3)

LogísKca  

•  Apresentação do professor

•  Material

•  Dúvidas? Interrompam a vontade...

•  Celulares silenciosos

(4)

ObjeKvos  

•  O  que  são  arquivos  e  como  usá-­‐los  

–  Criação,  leitura  e  gravação  

•  Recuperação  de  informações  sobre  arquivos  e   diretórios  

•  Hierarquia  de  classes  para  fluxo  de  E/S   •  Arquivos  texto  vs  Arquivos  Binários  

•  U>lização  das  Classes  

–  Scanner  e  Forma:er  para  processar  arquivos  texto   –  FileInputStream  e  FileOutputStream  para  leitura  e  

gravação  

(5)

Introdução  

•  Dados  armazenados  em  variáveis  e  arrays  são  

temporários.  São  perdidos  quando  uma  variável  local   sai  do  escopo  ou  quando  o  programa  termina.  

•  Para  retenção  de  longo  prazo  dos  dados,  os   computadores  podem  u>lizar  arquivos.    

•  Os  computadores  armazenam  os  arquivos  em  

disposiKvos  de  armazenamento  secundários,  como   discos  rígidos,  discos  óp>cos,  unidades  flash  e  fitas   magné>cas.    

•  Os  dados  man>dos  nos  arquivos  são  dados  

persistentes  porque  existem  além  da  duração  da   execução  do  programa.    

(6)

Hierarquia  de  dados  

•  Em  úl>ma  instância,  um  computador  processa  todos  os   itens  de  dados  como  combinações  de  zeros  e  uns.  

•  É  simples  e  econômico  para  os  engenheiros  

construírem  disposi>vos  eletrônicos  que  podem  

assumir  dois  estados  estáveis  —  um  representando  0  e   o  outro  representando  1.    

•  O  menor  item  de  dados  em  um  computador  pode   assumir  o  valor  0  ou  o  valor  1.    

•  Esse  item  de  dados  é  chamado  bit.  Abreviação  de   “binary  digit”  —  um  dígito  que  pode  assumir  um  de  

(7)

Hierarquia  de  dados  

•  Os  programadores  preferem  trabalhar  com  dígitos  

decimais  (0–9),  letras  (A–Z  e  a–z),  e  símbolos  especiais  

(por  exemplo,  $,  @,  %,  &,  *,  (,),  –,  +,  ",  :,  ?  e  /  ).  Conhecidos   como  caracteres.    

–  Conjunto  de  caracteres  é  o  conjunto  de  todos  os  caracteres  

u>lizado  para  escrever  programas  e  representar  itens  de  dados.    

•  O  Java  u>liza  caracteres  Unicode  que  são  compostos  de  

dois  bytes,  cada  qual  composto  de  oito  bits  

•  O  >po  byte  do  Java  pode  ser  u>lizado  para  representar   dados  em  bytes.    

•  O  Unicode  contém  caracteres  para  muitos  idiomas  do   mundo.    

(8)

Hierarquia  de  dados  

• 

Os  campos  são  compostos  de  caracteres  ou  

bytes  que  transmitem  um  significado.    

• 

Os  itens  de  dados  processados  pelos  

computadores  formam  uma  hierarquia  de  

dados  que  se  torna,  com  relação  à  estrutura,  

maior  e  mais  complexa  à  medida  que  

progredimos  de  bits  para  caracteres,  campos  

e  assim  por  diante.  

(9)

Hierarquia  de  dados  

• 

Em  geral,  vários  campos  compõem  um  

registro  (implementado  como  uma  classe  em  

Java).    

• 

Um  registro  é  um  grupo  de  campos  

relacionados.    

• 

Um  arquivo  é  um  grupo  de  registros  

(10)

Hierarquia  de  dados  

•  Para  facilitar  a  recuperação  de  registros  específicos  de   um  arquivo,  pelo  menos  um  campo  em  cada  registro  é   escolhido  como  uma  chave  de  registro.    

–  Uma  chave  de  registro  iden>fica  um  registro  como  

pertencente  a  uma  pessoa  ou  empresa  em  par>cular  e  é   única  para  cada  registro.    

–  Costuma  ser  u>lizada  para  pesquisar  e  classificar  registros.    

•  Há  muitas  maneiras  de  organizar  registros  em  um   arquivo.  A  mais  comum  é  chamada  arquivo  

sequencial,  em  que  os  registros  são  armazenados  em   ordem  pelo  campo  da  chave  de  registro.    

(11)

Hierarquia  de  dados  

• 

Um  grupo  de  arquivos  relacionados  chama-­‐se  

banco  de  dados.    

• 

Uma  coleção  de  programas  projetados  para  

criar  e  gerenciar  bancos  de  dados  é  chamada  

sistema  de  gerenciamento  de  bancos  de  

dados  

(database  management  system  –  

DBMS).    

(12)

Arquivos  e  fluxos  

• 

O  Java  visualiza  cada  arquivo  como  um  fluxo  

sequencial  de  bytes.    

• 

Cada  sistema  operacional  fornece  um  mecanismo  

para  determinar  o  final  de  um  arquivo,  como  um  

marcador  de  fim  de  arquivo  ou  uma  

contagem  

do  total  de  bytes  do  arquivo

 que  estão  gravados  

na  estrutura  de  dados  administra>va  man>da  

pelo  sistema.    

• 

Um  programa  Java  simplesmente  recebe  uma  

indicação  do  sistema  operacional

 quando  ele  

alcança  o  final  do  fluxo.  

(13)

Arquivos  e  fluxos  

•  Fluxos  de  arquivos  podem  ser  u>lizados  para  entrada  e   saída  de  dados,  como  bytes  ou  caracteres.    

–  Os  fluxos  de  entrada  e  saída  de  bytes  são  conhecidos   como  fluxos  baseados  em  bytes,  que  representam  os   dados  no  seu  formato  binário.    

–  Os  fluxos  de  entrada  e  saída  de  caracteres  são  conhecidos   como  fluxos  baseados  em  caracteres,  que  representam  os   dados  como  uma  sequência  de  caracteres.    

•  Os  arquivos  que  são  criados  u>lizando-­‐se  fluxos   baseados  em  bytes  chamam-­‐se  arquivos  binários.   •  Os  arquivos  criados  com  fluxos  baseados  em  

(14)

Arquivos  e  fluxos  

•  Um  programa  Java  abre  um  arquivo  criando  e  associando  um  

objeto  ao  fluxo  de  bytes  ou  de  caracteres.  Também  pode  associar   fluxos  a  disposi>vos  diferentes.    

•  O  Java  cria  três  objetos  de  fluxo  quando  um  programa  começa  a   executar:  

–  System.in  (o  objeto  de  fluxo  de  entrada  padrão)  normalmente  insere   bytes  a  par>r  do  teclado.  

–  System.out  (o  objeto  de  fluxo  de  saída  padrão)  normalmente  permite   enviar  os  dados  de  caractere  para  a  tela.  

–  System.err  (o  objeto  de  fluxo  de  erro  padrão)  normalmente  permite   enviar  as  mensagens  de  erro  baseadas  em  caracteres  para  a  tela.    

•  A  classe  System  fornece  os  métodos  setIn,  setOut  e  setErr  para   redirecionar  os  fluxos  de  entrada,  saída  e  erro  padrão,  

(15)

Arquivos  e  fluxos  

•  Programas  Java  realizam  o  processamento  de  arquivos   u>lizando  as  classes  no  pacote  java.io.    

•  Inclui  definições  para  classes  de  fluxos:  

–  FileInputStream  (para  entrada  baseada  em  bytes  de  um  

arquivo)    

–  FileOutputStream  (para  saída  baseada  em  bytes  de  um  arquivo)    

–  FileReader  (para  entrada  baseada  em  caracteres  de  um  

arquivo)    

–  FileWriter  (para  saída  baseada  em  caracteres  de  um  arquivo)    

•  Você  abre  um  arquivo  criando  um  objeto  de  uma  dessas   classes  de  fluxo.  O  construtor  do  objeto  abre  o  arquivo.    

(16)

Arquivos  e  fluxos  

•  Pode-­‐se  realizar  a  entrada  e  saída  de  objetos  ou  variáveis  

de  >pos  de  dados  primi>vos  sem  ter  de  se  preocupar  com   os  detalhes  da  conversão  desses  valores  em  formato  de   bytes.    

•  Para  realizar  essa  entrada  e  saída,  os  objetos  das  classes  

ObjectInputStream  e  ObjectOutputStream  podem  ser   u>lizados  juntos  com  as  classes  de  arquivos  baseados  em   fluxos  de  bytes  FileInputStream  e  FileOutputStream.    

•  A  hierarquia  completa  das  classes  do  pacote  java.io  pode   ser  examinada  na  documentação  on-­‐line  em    

–  h:p://docs.oracle.com/javase/6/docs/api/java/io/package-­‐ tree.html  

(17)

Arquivos  e  fluxos  

• 

A  classe  

File  

fornece  informações  sobre  arquivos  

e  diretórios.    

• 

A  entrada  e  saída  baseada  em  caracteres  pode  

ser  realizada  com  as  classes  

Scanner

 

e  

Forma^er

.    

• 

A  classe  

Scanner  

é  extensamente  u>lizada  para  

entrada  de  dados  a  

parKr  do  teclado

.  Essa  classe  

também  pode  ler  dados  de  um  arquivo.    

• 

A  classe  

Forma^er  

permite  que  os  dados  

formatados  sejam  

impressos  em  qualquer  fluxo  

baseado  em  texto

 de  uma  maneira  semelhante  

ao  método  

System.out.prin_

.  

(18)

Classe  File  

• 

A  classe  

File  

fornece  quatro  construtores:    

–  Aquele  com  um  argumento  String  especifica  o  nome   de  um  arquivo  ou  diretório  para  associar  com  o  objeto   File.    

•  O  nome  pode  conter  as  informações  de  caminho  bem  como   o  nome  de  um  arquivo  ou  diretório.    

•  Um  caminho  de  arquivo  ou  diretório  especifica  sua  

localização  em  disco.  

•  Um  caminho  absoluto  contém  todos  os  diretórios,  iniciando   com  o  diretório-­‐raiz,  que  levam  a  um  arquivo  ou  diretório   específico.    

•  Um  caminho  relaKvo  normalmente  inicia  no  diretório  em   que  o  aplica>vo  começou  a  executar  e,  portanto,  é  

(19)

Classe  File  

•  O  construtor  com  dois  argumentos  String  especifica  um  caminho   absoluto  ou  rela>vo  e  o  arquivo  ou  diretório  a  associar  com  o  

objeto  File.    

•  O  construtor  com  os  argumentos  File  e  String  u>liza  um  objeto  File   existente  que  especifica  o  diretório-­‐pai  do  arquivo  ou  diretório  

especificado  pelo  argumento  String.    

•  O  quarto  construtor  u>liza  um  objeto  URI  para  localizar  o  arquivo.    

–  Um  Uniform  Resource  Iden>fier  (URI)  é  uma  forma  mais  geral  dos   Uniform  Resource  Locators  (URLs)  que  são  u>lizados  para  localizar   sites  na  Web.    

•  A  hierarquia  completa  das  classes  do  pacote  java.io  pode  ser   visualizada  na  documentação  on-­‐line  em  

(20)

Exemplos  de  URI  

•  Usos  de  referências  URI  em  linguagens  marcadores  

–  Em  HTML,  o  valor  de  src,  atributo  do  elemento  img,  é  uma  referência  URI,   como  também  é  o  valor  de  href  para  os  elementos  a  ou  link.  

–  Em  XML,  o  iden>ficador  de  sistema  sucedendo  a  palavra-­‐chave  SYSTEM  em   um  DTD  é  uma  referência  URI  sem  fragmentos.  

–  Em  XSLT,  o  valor  do  atributo  href  do  elemento/instrução  xsl:import  é  uma   referência  URI,  como  também  o  primeiro  argumento  da  função  document().  

•  Exemplos  de  URIs  Absolutas  

–  h:p://example.org/absolute/URI/with/absolute/path/to/resource.txt   –  •p://example.org/resource.txt  

–  file:////home/example/example.org/resource.txt   –  urn:issn:1535-­‐3613  

(21)

Exemplos  de  URI  

•  Exemplos  de  referências  URI  

–  h:p://pt.wikipedia.org/wiki/URI#Exemplos_de_referências_URI  ("h:p"  é  o   nome  do  'conjunto',  "pt.wikipedia.org"  é  a  'autoridade',  "/wiki/URI"  é  o  

'caminho'  apontando  para  este  ar>go,  e  "#Exemplos_de_referências_URI"  é   um  'fragmento'  apontando  para  esta  seção)  

–  h:p://example.org/absolute/URI/with/absolute/path/to/resource.txt   –  ./rela>ve/URI/with/absolute/path/to/resource.txt   –  rela>ve/path/to/resource.txt   –  ../../../resource.txt   –  ../resource.txt#frag01   –  resource.txt   –  frag01   –  (cadeia  vazia)  

(22)
(23)
(24)
(25)
(26)

Separadores  

•  Um  caractere  separador  é  u>lizado  para  separar   diretórios  e  arquivos  no  caminho.    

•  No  Windows,  o  caractere  separador  é  uma  barra   inver>da  (\).    

•  No  Linux/UNIX,  é  uma  barra  normal  (/).    

•  O  Java  processa  esses  dois  caracteres  de  maneira   idênKca  em  um  nome  de  caminho.    

•  Ao  construir  Strings  que  representam  informações  do   caminho,  u>lize  File.separator  para  obter  o  separador   adequado  do  computador  local.    

(27)
(28)
(29)
(30)
(31)
(32)
(33)

Acesso  sequencial  

•  Uma  SecurityExcepKon  ocorre  se  o  usuário  não  >ver   permissão  de  gravar  dados  no  arquivo.    

•  Uma  FileNotFoundExcepKon  ocorre  se  o  arquivo  não   exis>r  e  um  novo  arquivo  não  puder  ser  criado.    

•  O  método  staKc  System.exit  termina  um  aplica>vo.    

–  Um  argumento  de  0  indica  terminação  bem-­‐sucedida  do   programa.    

–  Um  valor  de  não-­‐zero  normalmente  indica  que  ocorreu   um  erro.    

•  O  argumento  é  ú>l  se  o  programa  for  executado  de  um   arquivo  em  lote  no  Windows  ou  de  um  script  de  shell  

(34)

Acesso  sequencial  

•  O  método  Scanner  hasNext  determina  se  a  

combinação  de  teclas  de  fim  de  arquivo  foi  inserida.     •  Uma  NoSuchElementExcepKon  ocorre  se  os  dados  que  

estão  sendo  lidos  por  um  método  Scanner  es>verem   no  formato  errado  ou  se  não  houver  dados  para  

inserir.    

•  Uma  Forma^erClosedExcepKon  ocorre  se  Forma:er   for  fechado  quando  você  tentar  gerar  a  saída.    

•  O  método  Forma^er  close  fecha  o  arquivo.  

–  Se  o  método  close  não  for  chamado  explicitamente,  o   sistema  operacional  normalmente  fechará  o  arquivo   quando  a  execução  do  programa  terminar.  

(35)

Lendo  dados  a  parKr  de  um  arquivo  

de  texto  de  acesso  sequencial  

(36)

Lendo  dados  a  parKr  de  um  arquivo  

de  texto  de  acesso  sequencial  

(37)

Lendo  dados  a  parKr  de  um  arquivo  

de  texto  de  acesso  sequencial  

Se  um  Scanner  for  fechado  antes   dos  dados  serem  inseridos,  uma  

(38)

Atualizando  arquivos  de  acesso  

sequencial  

•  Os  dados  de  muitos  arquivos  sequenciais  não  podem  ser  

modificados  sem  o  risco  de  destruir  outros  dados  do  arquivo.     •  Se  for  necessário  alterar  o  nome  “White”  para  “Worthington”,  o  

nome  an>go  simplesmente  não  poderá  ser  sobrescrito,  porque  o   novo  nome  requer  mais  espaço.  

•  Os  campos  de  um  arquivo  de  texto  —  e  por  conseguinte  os   registros  —  podem  variar  de  tamanho.    

•  Os  registros  em  um  arquivo  de  acesso  sequencial  normalmente  não   são  atualizados  no  lugar.  Em  vez  disso,  o  arquivo  inteiro  é  

normalmente  regravado.    

•  Reescrever  todo  o  arquivo  não  é  uma  boa  ideia  para  atualizar  um   único  registro,  mas  razoável  se  um  número  substancial  de  registros   >ver  de  ser  atualizado.  

(39)

Serialização  de  objeto  

• 

Para  ler  ou  gravar  um  objeto  inteiro  em  um  

arquivo,  o  Java  fornece  a  

serialização  de  objeto

.    

• 

Um  objeto  serializado  é  representado  como  uma  

sequência  de  bytes  

que  inclui  os  dados  do  objeto  

e  as  informações  do  seu  >po.    

• 

Depois  que  um  objeto  serializado  >ver  sido  

gravado  em  um  arquivo,  ele  poderá  ser  lido  a  

par>r  do  arquivo  e  

desserializado  

para  recriar  o  

objeto  na  memória.    

(40)

Serialização  de  objeto  

• 

As  classes  

ObjectInputStream  

e  

ObjectOutputStream

,  que  implementam,  

respec>vamente,  as  interfaces  

ObjectInput  

e  

ObjectOutput  

,  permitem  que  objetos  inteiros  

sejam  lidos  ou  gravados  em  um  fluxo.  

• 

Para  u>lizar  a  serialização  com  arquivos,  

inicialize  os  objetos  

ObjectInputStream  

e  

ObjectOutputStream  

com  os  objetos  

(41)

Serialização  de  objeto  

•  O  método  de  interface  ObjectOutput  writeObject  

aceita  um  Object  como  um  argumento  e  grava  suas   informações  em  um  OutputStream.    

•  Uma  classe  que  implementa  ObjectOuput  (como  

ObjectOutputStream)  declara  esse  método  e  assegura  

que  o  objeto  de  saída  implementa  Serializable.    

•  O  método  de  interface  ObjectInput  readObject  lê  e   retorna  uma  referência  a  um  Object  a  par>r  de  um  

InputStream.    

•  Depois  que  um  objeto  >ver  sido  lido,  pode-­‐se  fazer   uma  coerção  da  sua  referência  para  o  >po  real  do   objeto.    

(42)
(43)

Serialização  de  objeto  

• 

Em  uma  classe  que  implementa  Serializable,  toda  

variável  deve  ser  Serializable.  

• 

Qualquer  uma  que  não  for,  deve  ser  declarada  

transient  

para  que  seja  

ignorada

 

durante  o  

processo  de  serialização.  

• 

Todas  as  variáveis  de  

Kpo  primiKvo  

são  

serializáveis.    

• 

Para  variáveis  de  Kpo  por  referência,  verifique  a  

documentação  da  classe  (e  possivelmente  suas  

superclasses)  para  assegurar  que  o  >po  é  

(44)
(45)
(46)
(47)

Lendo  e  desserializando  dados    

• 

O  método  

ObjectInputStream  readObject  

lê  

um  Object  de  um  arquivo.    

• 

O  método  

readObject  

lança  uma  

EOFExcepKon  

se  for  feita  uma  tenta>va  de  

leitura  

depois  do  final  do  arquivo

.    

• 

O  método  

readObject  

lança  uma  

ClassNotFoundExcepKon  

se  a  classe  do  objeto  

(48)
(49)

AKvidades  

• 

Modificar  o  sistema  do  ATM  para  

– 

Persis>r  em  arquivos  os  dados  das  contas,  clientes  

Referências

Documentos relacionados

Após a identificação do perfil dos servidores públicos efetivos da Secretaria de Saúde, apresenta-se uma análise das cinco hierarquias presentes da Teoria das Necessidades de

Para cada estrato foram geradas análises de correspondência canônica no programa PC ORD 5.0 (McCune & Mefford, 2006) com os dados de presença e ausência das espécies e as

Assim sendo, objetiva-se como produto da pesquisa a elaboração de uma proposta de Plano Museológico para o Museu Antropológico Diretor Pestana, e assim voltar o “olhar”

“À margem das divergências de interpretação sobre cada um dos preceitos legais ou sobre as implicações políticas da reforma trabalhista, que já foram objeto de

Os (as) demais professores (as) apesar de não apresentar uma abordagem específica como ocorre na resposta do (da) professor (a) A, mostraram-se comprometidos com a aprendizagem de

Semelhanças entre a sequência narrativa dos textos (expostas aqui muito brevemente, e em caráter exemplar), bem como constantes referências à obra ovidiana (à

Porém, o principal foco desta pesquisa é investigar como Lacan articulou essa questão nos primeiros anos de seu ensino, e, para tanto, será necessário

Em suma, seja pela assimetria constitutiva do regime monetário interna- cional, pela tendência ao acima aludido distúrbio no balanço de pagamentos ou ainda pelo tempo necessário