f.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. * Copyright (c) 2000-2018, 达梦数据库有限公司.
  3. * All rights reserved.
  4. */
  5. package dm
  6. import (
  7. "bytes"
  8. "compress/zlib"
  9. "github.com/golang/snappy"
  10. )
  11. func Compress(srcBuffer *Dm_build_361, offset int, length int, compressID int) ([]byte, error) {
  12. if compressID == Dm_build_1055 {
  13. return snappy.Encode(nil, srcBuffer.Dm_build_655(offset, length)), nil
  14. }
  15. return GzlibCompress(srcBuffer, offset, length)
  16. }
  17. func UnCompress(srcBytes []byte, compressID int) ([]byte, error) {
  18. if compressID == Dm_build_1055 {
  19. return snappy.Decode(nil, srcBytes)
  20. }
  21. return GzlibUncompress(srcBytes)
  22. }
  23. func GzlibCompress(srcBuffer *Dm_build_361, offset int, length int) ([]byte, error) {
  24. var ret bytes.Buffer
  25. var w = zlib.NewWriter(&ret)
  26. w.Write(srcBuffer.Dm_build_655(offset, length))
  27. w.Close()
  28. return ret.Bytes(), nil
  29. }
  30. func GzlibUncompress(srcBytes []byte) ([]byte, error) {
  31. var bytesBuf = new(bytes.Buffer)
  32. r, err := zlib.NewReader(bytes.NewReader(srcBytes))
  33. if err != nil {
  34. return nil, err
  35. }
  36. defer r.Close()
  37. _, err = bytesBuf.ReadFrom(r)
  38. if err != nil {
  39. return nil, err
  40. }
  41. return bytesBuf.Bytes(), nil
  42. }