mirror of
https://github.com/v2ray/v2ray-core.git
synced 2026-11-01 08:17:25 +00:00
refine buffer usage
This commit is contained in:
@@ -117,11 +117,39 @@ func (b *Buffer) PrependHash(h hash.Hash) *Buffer {
|
||||
return b
|
||||
}
|
||||
|
||||
func (b *Buffer) Byte(index int) byte {
|
||||
return b.Value[index]
|
||||
}
|
||||
|
||||
// Bytes returns the content bytes of this Buffer.
|
||||
func (b *Buffer) Bytes() []byte {
|
||||
return b.Value
|
||||
}
|
||||
|
||||
func (b *Buffer) BytesRange(from, to int) []byte {
|
||||
if from < 0 {
|
||||
from += len(b.Value)
|
||||
}
|
||||
if to < 0 {
|
||||
to += len(b.Value)
|
||||
}
|
||||
return b.Value[from:to]
|
||||
}
|
||||
|
||||
func (b *Buffer) BytesFrom(from int) []byte {
|
||||
if from < 0 {
|
||||
from += len(b.Value)
|
||||
}
|
||||
return b.Value[from:]
|
||||
}
|
||||
|
||||
func (b *Buffer) BytesTo(to int) []byte {
|
||||
if to < 0 {
|
||||
to += len(b.Value)
|
||||
}
|
||||
return b.Value[:to]
|
||||
}
|
||||
|
||||
// Slice cuts the buffer at the given position.
|
||||
func (b *Buffer) Slice(from, to int) *Buffer {
|
||||
b.offset += from
|
||||
|
||||
@@ -43,10 +43,10 @@ func TestBufferPrepend(t *testing.T) {
|
||||
buffer.Prepend([]byte{'x', 'y', 'z'})
|
||||
|
||||
assert.Int(buffer.Len()).Equals(6)
|
||||
assert.Bytes(buffer.Value).Equals([]byte("xyzabc"))
|
||||
assert.String(buffer.String()).Equals("xyzabc")
|
||||
|
||||
buffer.Prepend([]byte{'u', 'v', 'w'})
|
||||
assert.Bytes(buffer.Value).Equals([]byte("uvwxyzabc"))
|
||||
assert.String(buffer.String()).Equals("uvwxyzabc")
|
||||
}
|
||||
|
||||
func TestBufferString(t *testing.T) {
|
||||
|
||||
@@ -87,7 +87,7 @@ func (v *BufferedWriter) Flush() error {
|
||||
func (v *BufferedWriter) FlushWithoutLock() error {
|
||||
defer v.buffer.Clear()
|
||||
for !v.buffer.IsEmpty() {
|
||||
nBytes, err := v.writer.Write(v.buffer.Value)
|
||||
nBytes, err := v.writer.Write(v.buffer.Bytes())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -49,5 +49,5 @@ func TestBufferedWriterLargePayload(t *testing.T) {
|
||||
nBytes, err = writer.Write(payload[1024:])
|
||||
assert.Error(err).IsNil()
|
||||
assert.Int(nBytes).Equals(63 * 1024)
|
||||
assert.Bytes(content.Value).Equals(payload)
|
||||
assert.Bytes(content.Bytes()).Equals(payload)
|
||||
}
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ func NewAdaptiveWriter(writer io.Writer) *AdaptiveWriter {
|
||||
func (v *AdaptiveWriter) Write(buffer *alloc.Buffer) error {
|
||||
defer buffer.Release()
|
||||
for !buffer.IsEmpty() {
|
||||
nBytes, err := v.writer.Write(buffer.Value)
|
||||
nBytes, err := v.writer.Write(buffer.Bytes())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -13,8 +13,8 @@ import (
|
||||
func TestAdaptiveWriter(t *testing.T) {
|
||||
assert := assert.On(t)
|
||||
|
||||
lb := alloc.NewBuffer()
|
||||
rand.Read(lb.Value)
|
||||
lb := alloc.NewBuffer().Clear()
|
||||
lb.FillFrom(rand.Reader)
|
||||
|
||||
writeBuffer := make([]byte, 0, 1024*1024)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user