Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Membongkar Medan Integer dengan Cekap daripada Penampan Byte dalam Go?

Bagaimana untuk Membongkar Medan Integer dengan Cekap daripada Penampan Byte dalam Go?

DDD
DDDasal
2024-11-28 03:21:17157semak imbas

How to Efficiently Unpack Integer Fields from a Byte Buffer in Go?

Membongkar Medan Integer dalam Penampan Bait (Golang)

Dalam senario yang memerlukan pengekstrakan medan tertentu daripada penimbal bait, pembangun kerap menghadapi cabaran dengan cekap dan tepat mencapai ini. Untuk menangani perkara ini, mari kita terokai penyelesaian sedia ada dan pertimbangkan pendekatan alternatif.

Penyelesaian Sedia Ada

Penyelesaian yang disediakan melibatkan mencipta bait.Penimbal untuk setiap medan dan kemudian menggunakan binari.Baca untuk mengisi yang dikehendaki padang. Walaupun berfungsi, pendekatan ini boleh dipertingkatkan dari segi kecekapan dan kependekan kod.

Pendekatan Diperbaiki Menggunakan Next()

Untuk meningkatkan penyelesaian sedia ada, kami boleh memanfaatkan kaedah .Next() bagi bait.Penimbal untuk melangkau bait yang tidak diingini. Ini menghapuskan keperluan untuk mencipta berbilang penimbal dan membolehkan kod yang lebih ringkas.

p := bytes.NewBuffer(buf)

// Skip [8:20)
p.Next(12)

// 20: uint32
binary.Read(p, binary.LittleEndian, &fs.sb.firstDataBlock)

Menggunakan Struktur Pengepala

Pendekatan alternatif ialah mentakrifkan struktur pengepala yang mewakili pelbagai medan, kemudian baca struktur terus menggunakan binari.Baca. Ini memerlukan penciptaan struktur tersuai, tetapi ia menyediakan penyelesaian yang lebih cekap dan boleh diselenggara.

type Head struct {
    InodeCount      uint32
    BlockCount      uint32
    FirstBlock      uint32
    BlockSize       uint32
    BlocksPerGroup  uint32
    InodesPerBlock  uint32
}

func main() {
    var header Head

    err = binary.Read(file, binary.LittleEndian, &header)

    if err != nil {
        log.Fatal(err)
    }

    log.Printf("%#v\n", header)
}

Kesimpulan

Pendekatan yang lebih baik menggunakan .Next() menyediakan penyelesaian yang lebih optimum yang memerlukan lebih sedikit peruntukan dan pengulangan kod. Pendekatan struktur pengepala menawarkan perspektif yang berbeza dan boleh berguna apabila berurusan dengan struktur data yang lebih besar atau lebih kompleks.

Atas ialah kandungan terperinci Bagaimana untuk Membongkar Medan Integer dengan Cekap daripada Penampan Byte dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn