Maison > développement back-end > Golang > le corps du texte

Analyser les fichiers en fonction de parties d'octets

WBOY
Libérer: 2024-02-13 21:00:10
avant
1181 Les gens l'ont consulté

Analyser les fichiers en fonction de parties doctets

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.

Contenu de la question

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 :

  1. Les 4 premiers octets sont la version

  2. Les 4 octets suivants sont un entier représentant la quantité de commande attendue.

  3. 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)     
}
Copier après la connexion

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 ?

Solution de contournement

Vous souhaitez utiliser encoding/binary.read au lieu d'appeler read directement. Par exemple

var version int32
err := binary.Read(file, binary.LittleEndian, &version)
Copier après la connexion

(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!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal