Domanda

perché non siamo in grado di serializzare gli oggetti in un file ad accesso casuale? e d'altra parte siamo in grado di serializzare gli oggetti in file ad accesso sequenziale?

"" C # non fornisce un mezzo per ottenere la dimensione di un oggetto in fase di esecuzione. Ciò significa che, se si serializzare la classe, non possiamo garantire una lunghezza fissa dimensione del record "" (dal libro che ho letto in).

quindi non possiamo leggere il file ad accesso casuale, perché non conosciamo tutte le dimensioni oggetto nel file così come potremmo fare in cerca di ??????

È stato utile?

Soluzione

Qualsiasi oggetto contrassegnato con l'attributo SerializableAttribute può essere serializzato (nella maggior parte dei casi). Il risultato di serializzazione è sempre rivolta ad un flusso, che può benissimo essere un flusso di output file.

Stai chiedendo il motivo per cui un oggetto grafico non può essere deserializzato parzialmente? solo NET serializzazione [de] serializza oggetti grafici completi. In caso contrario, si dovrà ricorrere ad altri formattatori di serializzazione, o lascia la tua.

Per l'accesso casuale diretto a un file, è necessario aprire il file con un flusso che supporta la ricerca.

EDIT:

Alla ricerca nella corrente derivante da una serializzazione non ha scopo pratico - solo il formattatore serialiation sa cosa c'è dentro comunque e deve essere sempre alimentato fin dall'inizio del flusso

.

Per persistere i dati in altre strutture; farlo in un processo in due fasi: in primo luogo, indirizzare i byte serializzazione ad un [cioè memory-backed] flusso che si può leggere il formato dal seguito, quindi scrivere i dati al negozio reale supporto, utilizzando detto conoscenza delle dimensioni.

Non è possibile prevedere le dimensioni di un oggetto serializzato, perché la rappresentazione serializzata potrebbe differire molto dalla rappresentazione di esecuzione.

E 'ancora possibile ottenere il controllo esatto sopra formato di uscita, se si utilizzano solo tipi primitivi, e si scrive utilizzando un BinaryWriter -. Ma che non è la serializzazione per-sé

Altri suggerimenti

La serializzazione binaria predefinita in NET serializza un grafico intero oggetto, che, per sua natura di essere un grafico, non hanno una dimensione costante, il che significa che ciascun oggetto serializzazione (record) non avrà una dimensione costante, impedendo l'accesso casuale.

Per essere in grado di accedere in modo casuale ogni record in un file, scrivere il proprio attuazione della serializzazione binaria della classe, o di utilizzare un database. Se avete bisogno di un semplice, senza installare il motore di database single-threaded, dare un'occhiata a SQL Server Compact .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top