cubefs

Форк
0
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

15
package compressor
16

17
import (
18
	"bytes"
19
	"compress/gzip"
20
	"io"
21
)
22

23
// TODO: reuse bytes.Buffer
24

25
type gzipCompressor struct{}
26

27
func (gzipCompressor) Compress(pb []byte) ([]byte, error) {
28
	buffer := new(bytes.Buffer)
29
	gw := gzip.NewWriter(buffer)
30
	if _, err := gw.Write(pb); err != nil {
31
		return nil, err
32
	}
33
	if err := gw.Close(); err != nil {
34
		return nil, err
35
	}
36
	return buffer.Bytes(), nil
37
}
38

39
func (gzipCompressor) Decompress(cb []byte) ([]byte, error) {
40
	gr, err := gzip.NewReader(bytes.NewBuffer(cb))
41
	if err != nil {
42
		return nil, err
43
	}
44
	buffer := new(bytes.Buffer)
45
	if _, err := io.Copy(buffer, gr); err != nil {
46
		return nil, err
47
	}
48
	if err := gr.Close(); err != nil {
49
		return nil, err
50
	}
51
	return buffer.Bytes(), nil
52
}
53

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.