Mampatkan satu kepingan bait ke dalam kepingan lain di Golang

王林
Lepaskan: 2024-02-12 16:57:05
ke hadapan
1110 orang telah melayarinya

在 Golang 中将一个字节切片压缩到另一个切片中

Kandungan soalan

Saya ingin mencapai kebalikan tepat daripada penyelesaian yang diberikan di sini, mampatkan satu serpihan bait ke dalam serpihan bait yang lain -

Tukar []bait yang dimampatkan kepada []kod golang bait yang dimampatkan

Serupa dengan -

func ZipBytes(unippedBytes []byte) ([]byte, error) {
// ...
}
Salin selepas log masuk

[Saya akan memuat naik fail zip ini sebagai data borang berbilang bahagian untuk permintaan pos]

Penyelesaian

Anda boleh menggunakan bytes.buffer untuk zip terus ke dalam ingatan.

Contoh berikut menggunakan compress/zlib 因为它与问题中给出的示例相反。根据您的用例,您也可以轻松地将其更改为 compress/gzip (API yang hampir serupa).

package data_test

import (
    "bytes"
    "compress/zlib"
    "io"
    "testing"
)

func compress(buf []byte) ([]byte, error) {
    var out bytes.Buffer
    w := zlib.NewWriter(&out)
    if _, err := w.Write(buf); err != nil {
        return nil, err
    }
    if err := w.Close(); err != nil {
        return nil, err
    }
    return out.Bytes(), nil
}

func decompress(buf []byte) (_ []byte, e error) {
    r, err := zlib.NewReader(bytes.NewReader(buf))
    if err != nil {
        return nil, err
    }
    defer func() {
        if err := r.Close(); e == nil {
            e = err
        }
    }()
    return io.ReadAll(r)
}

func TestRoundtrip(t *testing.T) {
    want := []byte("test data")

    zdata, err := compress(want)
    if err != nil {
        t.Fatalf("compress: %v", err)
    }
    got, err := decompress(zdata)
    if err != nil {
        t.Fatalf("decompress: %v", err)
    }
    if !bytes.Equal(want, got) {
        t.Errorf("roundtrip: got = %q; want = %q", got, want)
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mampatkan satu kepingan bait ke dalam kepingan lain di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!