cubefs
52 строки · 1.3 Кб
1// Copyright 2023 The CubeFS Authors.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
12// implied. See the License for the specific language governing
13// permissions and limitations under the License.
14
15package compressor
16
17import (
18"bytes"
19"compress/gzip"
20"io"
21)
22
23// TODO: reuse bytes.Buffer
24
25type gzipCompressor struct{}
26
27func (gzipCompressor) Compress(pb []byte) ([]byte, error) {
28buffer := new(bytes.Buffer)
29gw := gzip.NewWriter(buffer)
30if _, err := gw.Write(pb); err != nil {
31return nil, err
32}
33if err := gw.Close(); err != nil {
34return nil, err
35}
36return buffer.Bytes(), nil
37}
38
39func (gzipCompressor) Decompress(cb []byte) ([]byte, error) {
40gr, err := gzip.NewReader(bytes.NewBuffer(cb))
41if err != nil {
42return nil, err
43}
44buffer := new(bytes.Buffer)
45if _, err := io.Copy(buffer, gr); err != nil {
46return nil, err
47}
48if err := gr.Close(); err != nil {
49return nil, err
50}
51return buffer.Bytes(), nil
52}
53