Heim >Backend-Entwicklung >Golang >Wie kann ich ganzzahlige Werte effizient aus einem Byte-Puffer in Go extrahieren?

Wie kann ich ganzzahlige Werte effizient aus einem Byte-Puffer in Go extrahieren?

Linda Hamilton
Linda HamiltonOriginal
2024-11-27 19:32:11207Durchsuche

How Can I Efficiently Extract Integer Values from a Byte Buffer in Go?

Ganzzahlwerte aus dem Byte-Puffer in Golang extrahieren

Sie benötigen eine Technik, um verschiedene Felder aus einem Byte-Puffer in Go zu extrahieren. Während Ihr aktueller Ansatz mit bytes.Buffer und expliziten Offsets dies effektiv erreicht, gibt es potenzielle Verbesserungen, die in Betracht gezogen werden sollten.

Alternative mit Byte Skipping

Um die Erstellung mehrerer zu vermeiden Puffer können Sie bytes.Buffer.Next() verwenden Methode:

func readSB(buf []byte) {
    p := bytes.NewBuffer(buf)

    binary.Read(p, binary.LittleEndian, &fs.sb.inodeCount)
    binary.Read(p, binary.LittleEndian, &fs.sb.blockCount)
    p.Next(12)
    binary.Read(p, binary.LittleEndian, &fs.sb.firstDataBlock)
    binary.Read(p, binary.LittleEndian, &fs.sb.blockSize)
    p.Next(4)
    binary.Read(p, binary.LittleEndian, &fs.sb.blockPerGroup)
    p.Next(4)
    binary.Read(p, binary.LittleEndian, &fs.sb.inodePerBlock)
}

Strukturbasiertes Lesen

Ein alternativer Ansatz besteht darin, eine Header-Struktur zu erstellen und binär zu verwenden.Direkt lesen:

type Head struct {
    InodeCount      uint32  //  0:4
    BlockCount      uint32  //  4:8
    // Skip fields
    FirstBlock      uint32  // 20:24
    BlockSize       uint32  // 24:28
    // Skip fields
    BlocksPerGroup  uint32  // 32:36
    // Skip fields
    InodesPerBlock  uint32  // 40:44
}

func readSB(buf []byte) {
    var header Head
    if err := binary.Read(bytes.NewReader(buf), binary.LittleEndian, &header); err != nil {
        log.Fatal(err)
    }

    // Access data using header fields
}

Das obige ist der detaillierte Inhalt vonWie kann ich ganzzahlige Werte effizient aus einem Byte-Puffer in Go extrahieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn