Pergunta

por isso que não pode serializar objetos em arquivo de Random Access? e, por outro lado, pode serializar objetos em arquivo de acesso sequencial?

"" C # não fornece um meio para obter o tamanho de um objeto em tempo de execução. Isso significa que, se serializar a classe, não podemos garantir um tamanho de registro de comprimento fixo "" (do livro que eu li na).

por isso não pode ler o arquivo de acesso aleatório porque nós não sabemos todos os tamanhos objeto no arquivo assim como poderíamos fazer busca ??????

Foi útil?

Solução

Qualquer objeto marcado com o atributo SerializableAttribute pode ser serializado (na maioria dos cenários). O resultado de serialização é sempre dirigida a um fluxo, que pode muito bem ser um fluxo de saída de arquivo.

Você está perguntando por que um gráfico de objeto não pode ser desserializado parcialmente? serialização .NET apenas [de] Serializa gráficos de objetos completos. Caso contrário, você vai ter que recorrer a outras formatadores de serialização, ou escreve sua própria.

Para acesso aleatório direto para um arquivo, você deve abrir o arquivo com um fluxo que suporta busca.

EDIT:

Buscando na corrente resultante de uma serialização não tem nenhuma finalidade prática -. Apenas o serialiation formatador sabe o que é lá de qualquer maneira e sempre deve ser alimentado o início do fluxo

Para persistindo os dados para outras estruturas; fazê-lo, num processo em duas fases: Primeiro, segmentar os bytes de serialização para um [i.e. lastreados em memória] córrego que você pode ler o tamanho da tarde, em seguida, escrever os dados para o armazenamento de backup real, usando disse conhecimento do tamanho.

Você não pode prever o tamanho de um objeto serializado, porque a representação serializada podem diferir muito com a representação de tempo de execução.

É ainda possível obter um controle exato sobre o tamanho de saída, se você usar apenas tipos primitivos, e você escrever usando um BinaryWriter -. Mas isso não é serialização per-se

Outras dicas

A serialização binária padrão no .NET serializa um gráfico do objeto inteiro, que, por sua natureza de ser um gráfico, não tem um tamanho constante, o que significa que cada objeto de serialização (registro) não terá um tamanho constante, impedindo o acesso aleatório.

Para poder acessar aleatoriamente qualquer registro em um arquivo, escrever sua própria implementação da serialização binária de sua classe, ou usar um banco de dados. Se você precisa de um simples, sem instalar o mecanismo de banco de single-threaded, ter um olhar para SQL Server Compact .

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