Pergunta

Eu quero salvar os objetos que eu gerados em um programa. Depois de reiniciar o aplicativo deve carregar automaticly todos os objetos em uma matriz. Eu quero escrevê-los em um arquivo e analisá-los após o reinício. São as outras possibilidades mais inteligentes do que fazê-lo manualmente? Obrigado

Foi útil?

Solução

Você pode usar o Berkeley DB classe PersistentMap para salvar sua (Serializable) objetos em uma implementação Map (a cache) que lhes persiste em um arquivo. É muito simples de usar e significa que você não precisa se preocupar com o que para salvar onde.

Três coisas a notar sobre a serialização:

  1. Como você vai lidar com as mudanças de esquema (ou seja, mudando os dados que suas aulas consistem em - adicionando um novo campo, por exemplo)
  2. O que acontece se o seu arquivo (s) corrompido? Dependendo de como confiável de armazenamento do seu programa precisa ser afetará sua decisão de como você salva os dados que seus objetos contêm implicitamente. Lembre-se, você sempre pode usar um banco de dados relacional, como MySQL e, em seguida, converter esses dados em seus objetos
  3. Você precisa ser capaz de exibição ou consulta os dados fora do seu programa? E se você quiser responder a algumas perguntas simples como "Quantas objeto tem a propriedade X?" Fácil de fazer se você já usou um banco de dados (relacional); não tão fácil se você serializado coisas para arquivos!

Outras dicas

Sim, o conceito que você está procurando é chamado serialização. Há uma multa tutorial na Sun aqui .

A idéia é que as classes que você deseja persistir tem que implementar a interface Serializable. Depois que você usa java.io.ObjectOutputStream.writeObject () para escrever o objeto para um arquivo e java.io.ObjectInputStream.readObject () para lê-lo de volta.

Você não pode serializar tudo, como há coisas que não fazem sentido para serializar, mas você pode trabalhar em torno deles. Aqui está uma citação sobre isso:

O mecanismo básico de Java serialização é simples de usar, mas há mais algumas coisas a saber. Como mencionado anteriormente, apenas os objetos marcados Serializável pode ser mantida. o classe java.lang.Object não implementar essa interface. Portanto, nem todos os objetos em Java pode ser persistiu automaticamente. As boas notícias é que a maioria deles - como AWT e Componentes Swing GUI, cordas, e matrizes - são serializable

.

Por outro lado, certos aulas de nível de sistema, como a Linha, OutputStream e suas subclasses, e Socket não são serializáveis. De fato, não faria qualquer sentido se estavam. Por exemplo, segmento em execução no meu JVM estaria usando minhas do sistema memória. Persistindo-lo e tentar executá-lo em sua JVM não faria sentido em absoluto. Outro ponto importante sobre java.lang.Object não implementação do interface Serializable é que qualquer classe que você criar que se estende apenas Object (e nenhum outro serializável classes) não é serializável, a menos implementar o mesmo interface de (Como foi feito com o exemplo anterior).

Essa situação apresenta um problema: E se temos uma classe que contém uma instância de Thread? Nesse caso, podemos sempre persistir objetos de que tipo? A resposta é sim, desde que dizer ao mecanismo de serialização nossa intenções de marcação nossos da classe Thread objeto como transiente.

Você pode querer verificar para fora Java eficaz para algumas pegadinhas com respeito a serialização. Estes são geralmente avançado, mas se este recurso é uma parte essencial do seu aplicativo, você vai querer saber sobre eles com antecedência.

Os exemplos incluem preocupações de segurança, herança e, sobretudo, o potencial de público 'congelar' uma API com realizá-lo (por exemplo, através de versões de software). Mais uma vez, todos estes são avançada e não deve impedir você per se.

java.io.Object [Input / Output] Corrente são as duas classes que você precisa para olhar.
Qualquer classe que você deseja persistir às necessidades de arquivo para implementar a interface java.io.Serializable.

Você também pode querer considerar o uso de codificação XML, o que me parece ter mais durabilidade do que serialização. aulas Use java.beans.XMLEncoder/XMLDecoder.

Eu não usei, mas o Google Code lançou protobuf recentemente.

Concordo com mjlee que Protocol Buffers da Google é um melhor maneira de fazer armazenar objetos do que a maneira de serialização originais. Dê uma olhada e você vai adorar.

Eu quero saber porque ninguém mencionou JSON e, por exemplo, Jackson JSON serializador

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top