1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2026-06-07 11:39:11 -04:00

fast read on first packet

This commit is contained in:
Darien Raymond
2017-11-08 22:23:21 +01:00
parent 14bc183754
commit d5fd7efa7e
5 changed files with 29 additions and 18 deletions

View File

@@ -57,18 +57,6 @@ func NewReader(reader io.Reader) Reader {
return &BytesToBufferReader{
reader: reader,
buffer: make([]byte, 32*1024),
}
}
func NewMergingReader(reader io.Reader) Reader {
return NewMergingReaderSize(reader, 32*1024)
}
func NewMergingReaderSize(reader io.Reader, size uint32) Reader {
return &BytesToBufferReader{
reader: reader,
buffer: make([]byte, size),
}
}

View File

@@ -12,8 +12,30 @@ type BytesToBufferReader struct {
buffer []byte
}
func NewBytesToBufferReader(reader io.Reader) Reader {
return &BytesToBufferReader{
reader: reader,
}
}
func (r *BytesToBufferReader) readSmall() (MultiBuffer, error) {
b := New()
if err := b.Reset(ReadFrom(r.reader)); err != nil {
b.Release()
return nil, err
}
if b.IsFull() {
r.buffer = make([]byte, 32*1024)
}
return NewMultiBufferValue(b), nil
}
// Read implements Reader.Read().
func (r *BytesToBufferReader) Read() (MultiBuffer, error) {
if r.buffer == nil {
return r.readSmall()
}
nBytes, err := r.reader.Read(r.buffer)
if err != nil {
return nil, err

View File

@@ -14,12 +14,13 @@ import (
func TestAdaptiveReader(t *testing.T) {
assert := With(t)
rawContent := make([]byte, 1024*1024)
buffer := bytes.NewBuffer(rawContent)
reader := NewReader(buffer)
reader := NewReader(bytes.NewReader(make([]byte, 1024*1024)))
b, err := reader.Read()
assert(err, IsNil)
assert(b.Len(), Equals, 2*1024)
b, err = reader.Read()
assert(err, IsNil)
assert(b.Len(), Equals, 32*1024)
}