Question

pourquoi nous ne pouvons pas sérialiser les objets dans le fichier Random Access? et d'autre part, nous pouvons sérialisation des objets dans le fichier d'accès séquentiel?

« » C # ne fournit pas un moyen pour obtenir la taille d'un objet à l'exécution. Cela signifie que, si nous sérialiser la classe, nous ne pouvons pas garantir une taille d'enregistrement de longueur fixe « » (extrait du livre que je lis dans).

donc nous ne pouvons pas lire le fichier d'accès aléatoire parce que nous ne savons pas toutes les tailles d'objets dans le fichier alors comment nous pourrions faire la recherche ??????

Était-ce utile?

La solution

Tout objet marqué avec l'attribut SerializableAttribute peut être sérialisé (dans la plupart des scénarios). Le résultat de sérialisation est toujours dirigé vers un cours d'eau, ce qui peut très bien être un flux de sortie de fichier.

Demandez-vous pourquoi un graphe d'objet ne peut pas être désérialisée partiellement? sérialisation .NET seulement [de] sérialise graphes d'objets complets. Sinon, vous devrez tourner vers d'autres formatteurs de sérialisation, ou écrivez votre propre.

Pour un accès aléatoire direct à un fichier, vous devez ouvrir le fichier avec un flux qui prend en charge la recherche.

EDIT:

A la recherche dans le courant résultant d'une sérialisation n'a pas de but pratique - que le formatter serialiation sait ce qui est là-bas de toute façon et doit toujours être alimenté le début du flux

.

Pour la persistance des données dans d'autres structures; faire dans un procédé en deux étapes: Tout d'abord, cibler les octets de sérialisation à un [à savoir flux soutenu mémoire] que vous pouvez lire la taille de la suite, puis d'écrire les données dans la mémoire de sauvegarde réel, utilisant ladite connaissance de la taille.

Vous ne pouvez pas prédire la taille d'un objet sérialisé, car la représentation sérialisée peut différer beaucoup de la représentation d'exécution.

il encore possible d'obtenir un contrôle précis sur la taille de sortie, si vous utilisez uniquement les types primitifs, et vous écrivez à l'aide d'un BinaryWriter -. Mais ce n'est pas sérialisation par-soi

Autres conseils

La valeur par défaut sérialisation binaire dans .NET sérialise un ensemble graphique d'objets qui, par sa nature d'être un graphique, ne dispose pas d'une taille constante, ce qui signifie que chaque objet sérialisation (record) ne sera pas une taille constante, empêcher l'accès aléatoire.

Pour pouvoir accéder au hasard tout enregistrement dans un fichier, écrire votre propre implémentation de la sérialisation binaire de votre classe, ou utiliser une base de données. Si vous avez besoin d'un simple, sans installer le moteur de base de données mono-thread, jetez un oeil à SQL Server Compact .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top