diff --git a/feature_stream.go b/feature_stream.go index 97355eb5..db78ec6f 100644 --- a/feature_stream.go +++ b/feature_stream.go @@ -14,6 +14,7 @@ type Stream struct { Error error indention int Attachment interface{} // open for customized encoder + floatBuf []byte } // NewStream create new stream instance. @@ -28,6 +29,7 @@ func NewStream(cfg API, out io.Writer, bufSize int) *Stream { n: 0, Error: nil, indention: 0, + floatBuf: make([]byte, 0, 32), } } diff --git a/feature_stream_float.go b/feature_stream_float.go index 9a404e11..2838713f 100644 --- a/feature_stream_float.go +++ b/feature_stream_float.go @@ -21,7 +21,9 @@ func (stream *Stream) WriteFloat32(val float32) { fmt = 'e' } } - stream.WriteRaw(strconv.FormatFloat(float64(val), fmt, -1, 32)) + stream.floatBuf = strconv.AppendFloat(stream.floatBuf, float64(val), fmt, -1, 32) + stream.Write(stream.floatBuf) + stream.floatBuf = stream.floatBuf[:0] } // WriteFloat32Lossy write float32 to stream with ONLY 6 digits precision although much much faster @@ -63,7 +65,9 @@ func (stream *Stream) WriteFloat64(val float64) { fmt = 'e' } } - stream.WriteRaw(strconv.FormatFloat(float64(val), fmt, -1, 64)) + stream.floatBuf = strconv.AppendFloat(stream.floatBuf, float64(val), fmt, -1, 64) + stream.Write(stream.floatBuf) + stream.floatBuf = stream.floatBuf[:0] } // WriteFloat64Lossy write float64 to stream with ONLY 6 digits precision although much much faster