Perché i file binari vengono caricati più velocemente dei file di testo alfanumerici?

4

Ho notato che quando carico / memorizzo file di dati di grandi dimensioni in un formato binario, il programma viene eseguito molto più velocemente rispetto a quando carico i dati da un file ASCII codificato.

Perché è così? I dati nel mio caso sono chiari, con un'analisi limitata limitata a read() o fscanf() .

    
posta William 26.07.2014 - 00:57
fonte

2 risposte

16

L'uso di fscanf() in sé probabilmente ne spiega la maggior parte. fscanf() deve interpretare la stringa del formato passato, quindi deve eseguire la scansione del flusso di input dal file, cercando di far corrispondere il modello specificato. Questa è in realtà una grande quantità di lavoro. read() deve solo leggere il numero specificato di byte dal file e non deve fare alcun parsing dell'input. Al contrario, fgets () fa un po 'più di lavoro di read() dal momento che deve guardare le nuove linee, ma fa molto meno lavoro di fscanf() .

    
risposta data 26.07.2014 - 01:21
fonte
4

È difficile dirlo senza sapere cosa stai analizzando ma ...

i file di testo sono generalmente più grandi. Vuoi memorizzare un numero, che può essere di 4 byte per un numero intero, ma 10 byte (* 2 per Windows unicode) per alcuni a seconda del valore.

Sia l'analisi che la formattazione possono essere estremamente lenti. per esempio. vuoi scrivere il numero intero "123" in binario - basta scaricare 4 byte e il gioco è fatto. Leggi di nuovo, leggi 4 byte, problema risolto.

Nel testo, questo implica capire come trasformare il 123 binario in "123" che è piuttosto dispendioso in termini di tempo, scriverlo e poi rileggerlo - devi analizzare il testo tra spazi bianchi, accendere ogni carattere ( ad esempio, 3 viene letto e aggiunto al valore, quindi 2 viene letto, moltiplicato per 10 e aggiunto, quindi 1 viene letto, moltiplicato per 100 e aggiunto). Spero che tu possa vedere come questo possa essere molto più lento della semplice lettura in 4 byte.

    
risposta data 26.07.2014 - 15:50
fonte

Leggi altre domande sui tag