You've already forked json-iterator
mirror of
https://github.com/json-iterator/go.git
synced 2025-12-20 23:30:38 +02:00
(*Stream).Flush: reset buffer to beginning
Previously it would append to the end of the buffer instead of reusing the
now-free space.
Benchmark demonstrates the improvement, run with -benchtime=10s
benchmark old ns/op new ns/op delta
Benchmark_encode_string_with_SetEscapeHTML-8 447 442 -1.12%
Benchmark_jsoniter_large_file-8 20998 21222 +1.07%
Benchmark_json_large_file-8 39593 40187 +1.50%
Benchmark_stream_encode_big_object-8 10787 8611 -20.17%
benchmark old allocs new allocs delta
Benchmark_encode_string_with_SetEscapeHTML-8 6 6 +0.00%
Benchmark_jsoniter_large_file-8 78 78 +0.00%
Benchmark_json_large_file-8 13 13 +0.00%
Benchmark_stream_encode_big_object-8 31 0 -100.00%
benchmark old bytes new bytes delta
Benchmark_encode_string_with_SetEscapeHTML-8 760 760 +0.00%
Benchmark_jsoniter_large_file-8 4920 4920 +0.00%
Benchmark_json_large_file-8 6640 6640 +0.00%
Benchmark_stream_encode_big_object-8 10056 0 -100.00%
Fixes #438
This commit is contained in:
@@ -103,14 +103,14 @@ func (stream *Stream) Flush() error {
|
|||||||
if stream.Error != nil {
|
if stream.Error != nil {
|
||||||
return stream.Error
|
return stream.Error
|
||||||
}
|
}
|
||||||
n, err := stream.out.Write(stream.buf)
|
_, err := stream.out.Write(stream.buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if stream.Error == nil {
|
if stream.Error == nil {
|
||||||
stream.Error = err
|
stream.Error = err
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
stream.buf = stream.buf[n:]
|
stream.buf = stream.buf[:0]
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
package jsoniter
|
package jsoniter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_writeByte_should_grow_buffer(t *testing.T) {
|
func Test_writeByte_should_grow_buffer(t *testing.T) {
|
||||||
@@ -65,5 +66,10 @@ func Test_flush_buffer_should_stop_grow_buffer(t *testing.T) {
|
|||||||
writer := new(NopWriter)
|
writer := new(NopWriter)
|
||||||
NewEncoder(writer).Encode(make([]int, 10000000))
|
NewEncoder(writer).Encode(make([]int, 10000000))
|
||||||
should := require.New(t)
|
should := require.New(t)
|
||||||
should.Equal(8, writer.bufferSize)
|
|
||||||
|
// 512 is the internal buffer size set in NewEncoder
|
||||||
|
//
|
||||||
|
// Flush is called after each array element, so only the first 8 bytes of it
|
||||||
|
// is ever used, and it is never extended. Capacity remains 512.
|
||||||
|
should.Equal(512, writer.bufferSize)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user