Skip to content

Commit d432719

Browse files
committed
Merge pull request #2 from nuss-justin/buffer-pool
Pool buffers for quoted strings and byte slices
2 parents 538518f + 8e11237 commit d432719

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

.travis.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
language: go
22
sudo: false
33
go:
4-
- 1.2
54
- 1.3
65
- 1.4
76
- 1.5

jsonstring.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bytes"
55
"io"
66
"strconv"
7+
"sync"
78
"unicode"
89
"unicode/utf16"
910
"unicode/utf8"
@@ -17,9 +18,24 @@ import (
1718

1819
var hex = "0123456789abcdef"
1920

21+
var bufferPool = sync.Pool{
22+
New: func() interface{} {
23+
return &bytes.Buffer{}
24+
},
25+
}
26+
27+
func getBuffer() *bytes.Buffer {
28+
return bufferPool.Get().(*bytes.Buffer)
29+
}
30+
31+
func poolBuffer(buf *bytes.Buffer) {
32+
buf.Reset()
33+
bufferPool.Put(buf)
34+
}
35+
2036
// NOTE: keep in sync with writeQuotedBytes below.
2137
func writeQuotedString(w io.Writer, s string) (int, error) {
22-
buf := &bytes.Buffer{}
38+
buf := getBuffer()
2339
buf.WriteByte('"')
2440
start := 0
2541
for i := 0; i < len(s); {
@@ -70,12 +86,14 @@ func writeQuotedString(w io.Writer, s string) (int, error) {
7086
buf.WriteString(s[start:])
7187
}
7288
buf.WriteByte('"')
73-
return w.Write(buf.Bytes())
89+
n, err := w.Write(buf.Bytes())
90+
poolBuffer(buf)
91+
return n, err
7492
}
7593

7694
// NOTE: keep in sync with writeQuoteString above.
7795
func writeQuotedBytes(w io.Writer, s []byte) (int, error) {
78-
buf := &bytes.Buffer{}
96+
buf := getBuffer()
7997
buf.WriteByte('"')
8098
start := 0
8199
for i := 0; i < len(s); {
@@ -126,7 +144,9 @@ func writeQuotedBytes(w io.Writer, s []byte) (int, error) {
126144
buf.Write(s[start:])
127145
}
128146
buf.WriteByte('"')
129-
return w.Write(buf.Bytes())
147+
n, err := w.Write(buf.Bytes())
148+
poolBuffer(buf)
149+
return n, err
130150
}
131151

132152
// getu4 decodes \uXXXX from the beginning of s, returning the hex value,

0 commit comments

Comments
 (0)