/ / Android app e serialização / eficiência de desserialização? - java, android, serialização, desserialização

App Android e eficiência de serialização / desserialização? - java, android, serialização, desserialização

Uma pesquisa inicial não rendeu os resultados esperados, e o Google também não ajudou muito. Então aqui vai ...

Eu estou trabalhando em um aplicativo onde estou serializandoobjetos para um arquivo. Não há realmente nenhuma necessidade, por causa do que o aplicativo é, para serializar mais de um objeto de cada vez (porque os objetos geralmente serão criados um de cada vez).

Contudo, desserialização é onde eu tenho a pergunta.

O que eu gostaria de fazer é desserializar um específico objeto, com base em um ID.

Em outras palavras, digamos que eu tenha um arquivo de objetos serializados com os seguintes dados:

1, Montgomery Burns, M, 100 2, Homer Simpson, M, 38 3, Waylon Smithers, M, 44 4, Krusty o palhaço, M, 60 5, Marge Simpson, F, 38 ... etc ...

E vamos dizer que eu só quero pegar o segundo objeto (por exemplo, saquê, o ID é 2).

Com base na leitura e pesquisa que fiz, não há como obter uma específico objeto dessa maneira. Se eu entendi corretamente, eu teria que ler todo o meu arquivo de objeto serializado (vamos chamá-lo de dados.ser) na memória (digamos, uma matriz ou lista de objetos desserializados) e, em seguida, iterar até encontrar o que eu " estou procurando. Isso está correto?

Eu não tenho problema em fazer isso, parece terrivelmente ineficiente.

Embora eu não prevejo que os usuários do meu aplicativo tenhamcentenas ou milhares de objetos, então tudo isso pode ser irrelevante, estou apenas imaginando se estou entendendo isso corretamente. É principalmente para uso pessoal e auto-aprendizagem sobre o Android.

Eu não sou contra o uso de um banco de dados embutido. Eu gostaria de evitá-lo por agora, apenas para manter o tamanho do aplicativo para baixo.

Então estou entendendo isso corretamente? Eu na verdade não vi uma maneira de recuperar um objeto específico, além do que ilustrei acima. Meu entendimento é que o maneira de fazê-lo em Java é fazer uma iteração sobre os objetos.

Respostas:

1 para resposta № 1

Eu estou trabalhando em um aplicativo onde eu estou serializando objetos para um arquivo.

Eu vou assumir, do resto do seupergunta, que você está se referindo a serialização Java. AFAICT, que está obsoleta há mais de uma década, e eu nunca recomendaria que alguém gastasse mais de 10 segundos considerando-a como uma opção de armazenamento. Mas você certamente é bem-vindo para usá-lo.

Com base na leitura e pesquisa que fiz, não há como obter um objeto específico dessa maneira.

Isso é porque você decidiu colocá-los todos em um arquivo. A unidade de serialização é o objeto de nível superior.

Você é certamente bem-vindo para armazená-los em seu próprio arquivo, com um nome de arquivo que permita identificar o arquivo apropriado para desserializar quando necessário.

Ou você é bem-vindo para manter um "índice" (por exemplo, HashMap) que é serializado separadamente, onde vocêmanter informações suficientes para identificar o arquivo que representa o próprio objeto. A idéia é que você mantenha o "índice" pequeno o suficiente para mantê-lo relativamente barato.

(por exemplo, saquê, o ID é 2)

Então tenha thingy-2.ser que contém o objeto serializado com ID 2, para que você possa desserializar esse objeto.

Eu não tenho problema em fazer isso, parece terrivelmente ineficiente.

Sua ineficiência real está na escrita, não na leitura. Se você alterar um byte em um objeto, terá que escrever a coleção inteira. A leitura é barata em comparação.