Heim > Backend-Entwicklung > Golang > Komprimieren Sie in Golang ein Byte-Slice in ein anderes Slice

Komprimieren Sie in Golang ein Byte-Slice in ein anderes Slice

王林
Freigeben: 2024-02-12 16:57:05
nach vorne
1155 Leute haben es durchsucht

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

Frageninhalt

Ich möchte das genaue Gegenteil der hier angegebenen Lösung erreichen, ein Bytefragment in ein anderes Bytefragment komprimieren -

Konvertieren Sie komprimiertes []Byte in dekomprimierten []Byte-Golang-Code

Ähnlich wie -

func ZipBytes(unippedBytes []byte) ([]byte, error) {
// ...
}
Nach dem Login kopieren

[Ich werde diese ZIP-Datei als mehrteilige Formulardaten für die Post-Anfrage hochladen]

Problemumgehung

Sie können bytes.buffer verwenden, um sie direkt in den Speicher zu komprimieren.

Das folgende Beispiel verwendet compress/zlib 因为它与问题中给出的示例相反。根据您的用例,您也可以轻松地将其更改为 compress/gzip (eine sehr ähnliche API).

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)
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonKomprimieren Sie in Golang ein Byte-Slice in ein anderes Slice. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage