l'éditeur php Baicao vous présente une méthode d'analyse de fichiers basée sur des parties d'octets. Cette méthode nous permet de traiter des fichiers volumineux sans charger l'intégralité du fichier en mémoire en une seule fois, mais analyse plutôt le contenu du fichier étape par étape selon les besoins. Cette méthode peut non seulement réduire l'utilisation de la mémoire, mais également améliorer l'efficacité d'exécution du programme. La méthode d'implémentation spécifique est que nous pouvons configurer un tampon, lire à chaque fois un certain nombre d'octets du fichier dans le tampon, puis analyser progressivement le contenu du tampon jusqu'à ce que le fichier soit analysé. Cette méthode peut être appliquée à divers scénarios d'analyse de fichiers, tels que l'analyse de fichiers journaux, l'analyse de fichiers de données volumineux, etc.
J'analyse un fichier qui est lu octet par octet et j'ai des instructions quant à quel octet représente quelle partie du fichier.
Documents de commande :
Les 4 premiers octets sont la version
Les 4 octets suivants sont un entier représentant la quantité de commande attendue.
Pour chaque commande (à partir du n°2), l'entier de 4 octets est l'identifiant de la commande.
Pour analyser cela, je charge d'abord le fichier :
file, err := os.Open("orders.abc") version := make([]byte, 4) c, err := file.Read(version) fmt.Printf("read %d, version is %d", c, version) orderCount := make([]byte, 4) c2, err := file.Read(orderCount) fmt.Printf("read %d, orderCount is %d", c2, orderCount) for i := 0; i < orderCount_as_int; i++ { orderId := make([]byte, 4) c3, err := file.Read(orderId) }
Existe-t-il une manière plus élégante d'analyser un fichier comme celui-ci ?
De plus, comment puis-je convertir la version/le nombre de commandes en un entier afin de pouvoir utiliser la valeur ?
Vous souhaitez utiliser encoding/binary.read au lieu d'appeler read directement. Par exemple
var version int32 err := binary.Read(file, binary.LittleEndian, &version)
(Vous devez également savoir si les données du fichier sont big-endian ou small-endian, et choisir l'ordre des octets approprié). Le package binaire fera le décodage pour vous.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!