Как сжать строку и вернуть байтовый массив в golang - PullRequest
0 голосов
/ 07 апреля 2020

Мой java код ниже:

    public static byte[] gzip(String str) throws Exception{
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    GZIPOutputStream gos = new GZIPOutputStream(baos);
    gos.write(str.getBytes("UTF-8"));
    gos.close();
    return baos.toByteArray();
}

Как сжать строку и вернуть байтовый массив в golang, как мой java готов?

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Вот полный пример функции gzipString, которая использует стандартную библиотеку compress / gzip

package main

import (
    "bytes"
    "compress/gzip"
    "fmt"
)

func gzipString(src string) ([]byte, error) {
    var buf bytes.Buffer
    zw := gzip.NewWriter(&buf)

    _, err := zw.Write([]byte(src))
    if err != nil {
        return nil, err
    }

    if err := zw.Close(); err != nil {
        return nil, err
    }

    return buf.Bytes(), nil
}

func main() {
    gzippedBytes, err := gzipString("")
    if err != nil {
        panic(err)
    }
    fmt.Printf("Zipped out: %v", gzippedBytes)
}
0 голосов
/ 07 апреля 2020

Посмотрите на следующий фрагмент. Playgorund: https://play.golang.org/p/3kXBmQ-c9xE

Golang имеет все в стандартной библиотеке. Чек https://golang.org/pkg/compress/gzip

package main

import (
    "bytes"
    "compress/gzip"
    "fmt"
    "log"
    "strings"
    "io"
)

func main() {
    s := "Hello, playground"

    // Create source reader
    src := strings.NewReader(s)

    buf := bytes.NewBuffer(nil)

    // Create destination writer
    dst := gzip.NewWriter(buf)

    // copy the content as gzip compressed
    _, err := io.Copy(dst, src)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(buf.String())
}

...