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?

Foi útil?

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.

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