Maison > développement back-end > Golang > Compresser une tranche d'octets dans une autre tranche dans Golang

Compresser une tranche d'octets dans une autre tranche dans Golang

王林
Libérer: 2024-02-12 16:57:05
avant
1203 Les gens l'ont consulté

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

Contenu de la question

Je veux obtenir exactement le contraire de la solution donnée ici, compresser un fragment d'octet dans un autre fragment d'octet -

Convertir []octet compressé en code golang décompressé []octet

Semblable à -

func ZipBytes(unippedBytes []byte) ([]byte, error) {
// ...
}
Copier après la connexion

[Je vais télécharger ce fichier zip sous forme de données de formulaire en plusieurs parties pour la demande de publication]

Solution de contournement

Vous pouvez utiliser bytes.buffer pour compresser directement en mémoire.

L'exemple suivant utilise compress/zlib 因为它与问题中给出的示例相反。根据您的用例,您也可以轻松地将其更改为 compress/gzip (une API très similaire).

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

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!

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