diff options
| author | Rui Ueyama <ruiu@google.com> | 2014-06-11 11:22:08 -0700 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2014-06-11 11:22:08 -0700 |
| commit | afb7b67ae99c5edfb5210ad015be934b96ecc445 (patch) | |
| tree | 1f5a0847757d3089e843a455018c542ffb3f629b /src/pkg/encoding | |
| parent | f20e4d5ecb87cae4846be07a68cb0e9132e6a8c6 (diff) | |
| download | go-afb7b67ae99c5edfb5210ad015be934b96ecc445.tar.xz | |
encoding/base64, encoding/base32: make DecodeString faster
Previously, an input string was stripped of newline
characters at the beginning of DecodeString and then passed
to Decode. Decode again tried to strip newline characters.
That's waste of time.
benchmark old MB/s new MB/s speedup
BenchmarkDecodeString 38.37 65.20 1.70x
LGTM=dave, bradfitz
R=golang-codereviews, dave, bradfitz
CC=golang-codereviews
https://golang.org/cl/91770051
Diffstat (limited to 'src/pkg/encoding')
| -rw-r--r-- | src/pkg/encoding/base32/base32.go | 2 | ||||
| -rw-r--r-- | src/pkg/encoding/base64/base64.go | 2 | ||||
| -rw-r--r-- | src/pkg/encoding/base64/base64_test.go | 8 |
3 files changed, 10 insertions, 2 deletions
diff --git a/src/pkg/encoding/base32/base32.go b/src/pkg/encoding/base32/base32.go index d770de3915..7613de24d2 100644 --- a/src/pkg/encoding/base32/base32.go +++ b/src/pkg/encoding/base32/base32.go @@ -330,7 +330,7 @@ func (enc *Encoding) Decode(dst, src []byte) (n int, err error) { func (enc *Encoding) DecodeString(s string) ([]byte, error) { s = strings.Map(removeNewlinesMapper, s) dbuf := make([]byte, enc.DecodedLen(len(s))) - n, err := enc.Decode(dbuf, []byte(s)) + n, _, err := enc.decode(dbuf, []byte(s)) return dbuf[:n], err } diff --git a/src/pkg/encoding/base64/base64.go b/src/pkg/encoding/base64/base64.go index e38c26d0ec..4f1fcad917 100644 --- a/src/pkg/encoding/base64/base64.go +++ b/src/pkg/encoding/base64/base64.go @@ -295,7 +295,7 @@ func (enc *Encoding) Decode(dst, src []byte) (n int, err error) { func (enc *Encoding) DecodeString(s string) ([]byte, error) { s = strings.Map(removeNewlinesMapper, s) dbuf := make([]byte, enc.DecodedLen(len(s))) - n, err := enc.Decode(dbuf, []byte(s)) + n, _, err := enc.decode(dbuf, []byte(s)) return dbuf[:n], err } diff --git a/src/pkg/encoding/base64/base64_test.go b/src/pkg/encoding/base64/base64_test.go index a075194e03..691edb755b 100644 --- a/src/pkg/encoding/base64/base64_test.go +++ b/src/pkg/encoding/base64/base64_test.go @@ -342,3 +342,11 @@ func TestDecoderIssue7733(t *testing.T) { t.Errorf("DecodeString = %q; want abcd", s) } } + +func BenchmarkDecodeString(b *testing.B) { + data := StdEncoding.EncodeToString(make([]byte, 8192)) + b.SetBytes(int64(len(data))) + for i := 0; i < b.N; i++ { + StdEncoding.DecodeString(data) + } +} |
