71 lines
1.4 KiB
Go
71 lines
1.4 KiB
Go
package engine
|
|
|
|
import (
|
|
"bytes"
|
|
"compress/gzip"
|
|
"encoding/gob"
|
|
"fmt"
|
|
"io"
|
|
)
|
|
|
|
type SomeStruct struct {
|
|
A string
|
|
B int64
|
|
C float64
|
|
}
|
|
|
|
//1.
|
|
func StructToBytes(obj SomeStruct) (bytes.Buffer, error) {
|
|
//now gob this
|
|
var indexBuffer bytes.Buffer
|
|
encoder := gob.NewEncoder(&indexBuffer)
|
|
if err := encoder.Encode(obj); err != nil {
|
|
return indexBuffer, err
|
|
}
|
|
return indexBuffer, nil
|
|
}
|
|
|
|
//1.
|
|
func BytesToGob(obj []byte) (bytes.Buffer, error) {
|
|
//now gob this
|
|
var indexBuffer bytes.Buffer
|
|
encoder := gob.NewEncoder(&indexBuffer)
|
|
if err := encoder.Encode(obj); err != nil {
|
|
return indexBuffer, err
|
|
}
|
|
return indexBuffer, nil
|
|
}
|
|
|
|
//2.
|
|
func CompressBinary(binaryBuffer *bytes.Buffer) (bytes.Buffer, error) {
|
|
//now compress it
|
|
var compressionBuffer bytes.Buffer
|
|
compressor := gzip.NewWriter(&compressionBuffer)
|
|
_, err := compressor.Write(binaryBuffer.Bytes())
|
|
err = compressor.Close()
|
|
return compressionBuffer, err
|
|
}
|
|
|
|
//3.
|
|
func DecompressBinary(compressionBuffer bytes.Buffer) (*gzip.Reader, error) {
|
|
//now decompress it
|
|
dataReader := bytes.NewReader(compressionBuffer.Bytes())
|
|
if reader, err := gzip.NewReader(dataReader); err != nil {
|
|
fmt.Println("gzip failed ", err)
|
|
return &gzip.Reader{}, err
|
|
} else {
|
|
err := reader.Close()
|
|
return reader, err
|
|
}
|
|
}
|
|
|
|
//4.
|
|
func GobToBytes(binaryBytes io.Reader) ([]byte, error) {
|
|
decoder := gob.NewDecoder(binaryBytes)
|
|
var tmp []byte
|
|
if err := decoder.Decode(&tmp); err != nil {
|
|
return tmp, err
|
|
}
|
|
return tmp, nil
|
|
}
|