Pages

Subscribe:

Ads 468x60px

quarta-feira, 20 de julho de 2011

XStream - Salvando arquivos XML com Java

XStream é uma biblioteca simples para serializar objetos em arquivos XML, e desserializá-los em objetos Java. Ou seja, com essa biblioteca você é capaz de salvar seus objetos em arquivos XML e restaurar esse arquivos em objetos novamente.

Entre as principais vantagens de usar essa biblioteca estão:
  • É fácil de usar – Existe uma classe de alto nível que encapsula a biblioteca, com apenas uma classe você consegui salvar seus objetos em arquivos XML.
  • Desempenho – É rápido e consome pouca memória, por isso pode ser usado para objetos com muitos dados, ou em sistema que necessitem salvar muitos XML’s.
  • Não é necessário modificar classes e objetos -  Serializa campos internos, incluindo os private e final. Suporta classes internas e não públicas, e não exige que as classe possuam um construtor padrão.

Para aplicações pequenas, em que não seja necessário XML complexo, o XStream se mostra como uma excelente opção. Sua facilidade de uso torna tudo mais simples, e o desenvolvedor precisa de poucas linhas para salvar e recuperar seus objetos.

Primeiramente é necessário fazer o download do arquivo .jar da biblioteca, o endereço é http://xstream.codehaus.org/download.html. Se o código for usado como mostrado nessa postagem não é necessário incluir nenhuma outra biblioteca ao seu projeto.
O Exemplo a seguir foi adaptado do site da biblioteca. Primeiramente são criadas duas classes simples:
public class Pessoa {
  private String nome;
  private String sobreNome;
  private Fone fone;
  private Fone celular;
}

public class Fone {
  private int codigo;
  private String numero;
}

Após ter as classes que deseja serializar, e adicionar a biblioteca ao seu ClassPath, inicie um objeto XStream. Ele será responsável pela serialização e desserialização dos objetos.
XStream xstream = new XStream(new DomDriver());
//O código abaixo é opcional
xstream.alias("pessoa", Pessoa.class);
xstream.alias("telefone", Fone.class);

Agora vamos mostrar os códigos para serializar um objeto da classe Pessoa. Basta usar o objeto xstream criado:
Pessoa joao = new Pessoa(“João”, “da Silva”);
joao.setFone(new Fone(1,”1234-456”));
joao.setCelular(new Fone(2,”9999-9999”));
String xml = xstream.toXML();


Com essa “manobra” a variável xml recebe o seguinte valor:

<pessoa>
  <nome>João</nome>
  <sobrenome>da Silva</sobrenome>
  <fone>
    <codigo>1</codigo>
    <numero>1234-456</numero >
  </fone>
  <celular>
    <codigo>2</codigo>
    <numero>9999-999</numero >
  </celular>
</pessoa>


Para desserializar é tão fácil quanto serializar:
Pessoa novoJoao = (Pessoa)xstream.fromXML(xml);

É muito fácil né?!

E tem muitas utilidades! Quando desenvolvi o ecf, utilizei para restaurar itens vendidos quando o programa fechava ou havia queda de energia, ele salvava, a cada item vendido o arquivo xml da classe Cupom, e se ocorrece alguma eventualidade, ele transforma esse xml em objeto, e pronto, a aplicação ficava no mesmo 
estado em que estava quando aconteceu o problema.

Abaixo seguem alguns códigos que podem ajudar :
//Para omitir algum campo do xml
//Não salvaremos o campo celular da classe Pessoa
xstream.omitField(Pessoa.class, “celular”);
 ---------------------------------------------------
//Para salvar em uma arquivo – podemos salvar em uma OutPutStream
xstream.toXML(joao, new FileOutPutStream(“arquivo.xml”)); 
 ---------------------------------------------------
//Para recuperar de um arquivo- usando InputStream
Pessoa novoJoao;
novojoao = (Pessoa) xstream.fromXML(new FileInputStream(“arquivo.xml”));
 ---------------------------------------------------
//Para aceitar caracteres especiais
XStream stream = newXStream(new DomDriver("ISO-8859-1"));

sexta-feira, 1 de julho de 2011

Artigo sobre sistema OMR para correção de Cartões de Resposta

Enquanto não cumpro minha promessa de criar postagem frequentes para meu blog, vou deixar aqui um artigo sobre meu tema de monografia.
Trabalhei com Optical Mark Recognition (grosseiramente traduzido como Reconhecimento de Marcas Ópticas).

Neste trabalho usei processamento de imagens para corrigir Cartões de Respostas (gabaritos) de imagens provenientes de um scanner.

Desenvolvi também o sistema que faz isso.

A ideia é simples. A partir de imagens digitalizadas de cartões de respostas, o sistema permite criar um modelo no qual temos as marcas contidas nessa imagem, e a partir desse modelo ele é capaz de dizer quais opções foram selecionadas por determinado candidato. Além disso os dados podem ser exportados em XML ou TXT.

Espero que possa ajudar alguém!