Use io.ReadSeeker instead of io.ReadCloser (#31)

This commit is contained in:
Sergei Dudka 2019-03-20 04:50:16 +01:00 committed by Hajime Hoshi
parent 90191ee719
commit 427f6ab385
4 changed files with 7 additions and 20 deletions

View file

@ -26,7 +26,7 @@ func BenchmarkDecode(b *testing.B) {
if err != nil {
b.Fatal(err)
}
src := &bytesReadCloser{bytes.NewReader(buf)}
src := bytes.NewReader(buf)
for i := 0; i < b.N; i++ {
if _, err := src.Seek(0, io.SeekStart); err != nil {
b.Fatal(err)

View file

@ -111,9 +111,9 @@ func (d *Decoder) Seek(offset int64, whence int) (int64, error) {
return npos, nil
}
// Close is io.Closer's Close.
// Close is io.Closer's Close. Close does nothing and always returns nil.
func (d *Decoder) Close() error {
return d.source.Close()
return nil
}
// SampleRate returns the sample rate like 44100.
@ -186,12 +186,12 @@ func (d *Decoder) Length() int64 {
return d.length
}
// NewDecoder decodes the given io.ReadCloser and returns a decoded stream.
// NewDecoder decodes the given io.Reader and returns a decoded stream.
//
// The stream is always formatted as 16bit (little endian) 2 channels
// even if the source is single channel MP3.
// Thus, a sample always consists of 4 bytes.
func NewDecoder(r io.ReadCloser) (*Decoder, error) {
func NewDecoder(r io.Reader) (*Decoder, error) {
s := &source{
reader: r,
}

View file

@ -19,14 +19,6 @@ import (
"testing"
)
type bytesReadCloser struct {
*bytes.Reader
}
func (b *bytesReadCloser) Close() error {
return nil
}
func TestFuzzing(t *testing.T) {
inputs := []string{
// #3
@ -109,7 +101,7 @@ func TestFuzzing(t *testing.T) {
"0000000000000",
}
for _, input := range inputs {
b := &bytesReadCloser{bytes.NewReader([]byte(input))}
b := bytes.NewReader([]byte(input))
_, _ = NewDecoder(b)
}
}

View file

@ -19,7 +19,7 @@ import (
)
type source struct {
reader io.ReadCloser
reader io.Reader
buf []byte
pos int64
}
@ -38,11 +38,6 @@ func (s *source) Seek(position int64, whence int) (int64, error) {
return n, nil
}
func (s *source) Close() error {
s.buf = nil
return s.reader.Close()
}
func (s *source) skipTags() error {
buf := make([]byte, 3)
if _, err := s.ReadFull(buf); err != nil {