Posição do objeto dentro do arquivo texto!

3 respostas
ruminiki

Olá pessoal!!
estou precisando de um help…
estou gravando objetos em um arquivo texto com ObjectOutputStream, preciso saber para cada objeto que eu gravo, a posição inicial e a posição final dele dentro do arquivo, alguém sabe me dizer como faço isso?

vlew abraço a todos.

3 Respostas

T

Hum? Você não pode gravar objetos em um arquivo texto com ObjectOutputStream. Quanto mais saber a posição.
Pegue um ObjectOutputStream e tente ver o que o programa grava.
Um monte de códigos binários.
Além disso, um ObjectOutputStream é completamente seqüencial; não faz muito sentido você ter a posição (que implicaria em você poder ir diretamente para uma determinada posição com “seek”).

ruminiki

Sobre o arquivo texto acredito que tenha me expressado mal.

a api de serialização não me permite ir direto ao objeto, mas posso criar uma estrutura que me permita isso, oque preciso é que no momento da gravação eu armazene a posição inicial e a posição final…

por exemplo para mim ler o primeiro objeto eu começo com o primeiro byte, sabendo o tamanho do objeto eu consigo saber onde ele termina, isso é possivel?

agradeço sua disposição em me ajudar…

T

Um ObjectOutputStream armazena os objetos de forma especial.
O método writeObject, que é usado para gravar objetos, faz o seguinte:

  • Armazena um descritor da classe do objeto;
  • Armazena as variáveis de instância desse objeto.

Uma variável de instância pode conter:

  • Um tipo primitivo - nesse caso o dado é serializado diretamente. Por exemplo, o inteiro i = 12345678 (em hexadecimal, 00BC614E) é serializado para os seguintes 4 bytes: 00 BC 61 4E

  • Uma string - A string é convertida para um array de bytes, usando-se a codificação UTF-8, e então o comprimento desse array de bytes é salvo (em 4 bytes), e a seguir o tal array.

  • Um objeto serializável que já tenha sido serializado antes nesse ObjectOutputStream - nesse caso, é serializado apenas um indicador desse objeto para uma tabela interna, contida no objeto ObjectOutputStream.

  • Um objeto serializável que ainda não tenha sido serializado nesse ObjectOutputStream - nesse caso, serializa-se um indicador, e então o objeto em si.

Não é possível efetuar acesso aleatório em um ObjectOutputStream, porque o estado de um objeto depende do estado dos objetos que já tenham sido serializados. Ou seja, você tem de começar sempre do começo, quando se trata de um ObjectOutputStream. Chato, não?

Criado 14 de outubro de 2008
Ultima resposta 15 de out. de 2008
Respostas 3
Participantes 2