é possível acessar objetos aleatoriamente em java?
-
13-11-2019 - |
Pergunta
basicamente eu tenho um arquivo de String Objects.Eu usei Java ObjectOutputStream para armazenar os objetos.É possível acessar os objetos (Strings) aleatoriamente, digamos, se eu quiser acessar o 11º objeto, eu poderia de alguma forma pular para esse local sem ter que usar lerObjeto() 11ª vez para fazer o loop até esse local.E se eu quiser pular para trás, também posso fazer isso, sem precisar fazer um loop desde o início novamente.Obrigado.
Como é sugerido, acho que posso de alguma forma usar o método skipBytes() para realizar algum tipo de acesso aleatório.Embora eu não possa garantir que meu objeto seja de tamanho fixo, e se eu puder manter uma matriz de posições desses objetos no arquivo, eu poderia simplesmente usar essa matriz como um índice e skipBytes() para acesso aleatório.Então o problema permanece: de qualquer maneira, eu poderia saber o tamanho dos objetos quando realmente os estou escrevendo, para poder registrar a posição de alguma forma?
Solução
O em si não pode fazer isso, porque antes de tudo, não pode saber o tamanho dos objetos nesse arquivo;Na verdade, não pode nem saber que os objetos são do mesmo tipo.
Se você saber com certeza de que os objetos são dimensionados e você sabe esse tamanho, você pode fazer uso do método ObjectOutputStream
- mas duvido que você realmente saiba disso.
.
editar: Obrigado por aceitar a minha resposta, mas (apenas deixe as coisas claras): Minha intenção era mostrar uma maneira de poderia ser feito Dado os requisitos que você mencionou, mas isso não é de todo o caminho.> Deve ser feito , na minha opinião.:)
Outras dicas
A única maneira que você pode fazer isso é armazenar os objetos separadamente em seus próprios fluxos, dentro do mesmo arquivo ou em arquivos diferentes.
É provável que a coisa mais simples seja fazer é armazenar seus objetos em uma lista e, em seguida, ler essa lista em uma leitura e acessar a lista aleatoriamente.
Isto não é possível com ObjectInputStream
, se você precisar de acesso aleatório, precisará primeiro ler todos os objetos em uma coleção/array que suporte acesso aleatório.
Usando ObjectOutputStream
armazenar objetos String é um exagero completo.Você já pensou em usar um índice de posições iniciais.Então por que não armazenar as strings diretamente no arquivo usando um FileOutputStream
- embrulhe-o em um OutputStringWriter
usando uma codificação de comprimento fixo (onde o número de bytes == comprimento da string, possivelmente *2), ou use toBytes(encoding)
em cada string individualmente e observe o comprimento das matrizes de bytes resultantes.