mirror of
https://github.com/json-iterator/go.git
synced 2025-05-13 21:36:29 +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:
parent
a54d350455
commit
91f4a6405d
@ -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)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user