浏览代码

Merge pull request #446 from potocnyj/amortize-snappy-allocations

Amortize allocations in snappyDecode
Evan Huus 10 年之前
父节点
当前提交
440808cd4c
共有 1 个文件被更改,包括 7 次插入4 次删除
  1. 7 4
      snappy.go

+ 7 - 4
snappy.go

@@ -17,14 +17,17 @@ func snappyEncode(src []byte) ([]byte, error) {
 func snappyDecode(src []byte) ([]byte, error) {
 func snappyDecode(src []byte) ([]byte, error) {
 	if bytes.Equal(src[:8], snappyMagic) {
 	if bytes.Equal(src[:8], snappyMagic) {
 		var (
 		var (
-			pos = uint32(16)
-			max = uint32(len(src))
-			dst []byte
+			pos   = uint32(16)
+			max   = uint32(len(src))
+			dst   = make([]byte, 0, len(src))
+			chunk []byte
+			err   error
 		)
 		)
 		for pos < max {
 		for pos < max {
 			size := binary.BigEndian.Uint32(src[pos : pos+4])
 			size := binary.BigEndian.Uint32(src[pos : pos+4])
 			pos = pos + 4
 			pos = pos + 4
-			chunk, err := snappy.Decode(nil, src[pos:pos+size])
+
+			chunk, err = snappy.Decode(chunk, src[pos:pos+size])
 			if err != nil {
 			if err != nil {
 				return nil, err
 				return nil, err
 			}
 			}