func NewReader(r io.Reader, verifyChecksum bool) io.Reader {
	return &reader{
		reader: r,
		verifyChecksum: verifyChecksum,
		hdr: make([]byte, 4),
		src: make([]byte, 4096),
		dst: make([]byte, 4096),
	}
}
NewReader returns an io.Reader interface to the snappy framed stream format.

It transparently handles reading the stream identifier (but does not proxy this
to the caller), decompresses blocks, and (optionally) validates checksums.

Internally, three buffers are maintained.  The first two are for reading
off the wrapped io.Reader and for holding the decompressed block (both are grown
automatically and re-used and will never exceed the largest block size, 65536). The
last buffer contains the *unread* decompressed bytes (and can grow indefinitely).

The second param determines whether or not the reader will verify block
checksums and can be enabled/disabled with the constants VerifyChecksum and SkipVerifyChecksum

For each Read, the returned length will be up to the lesser of len(b) or 65536
decompressed bytes, regardless of the length of *compressed* bytes read
from the wrapped io.Reader.
package snappystream
import (
	"bytes"
	"fmt"
	"hash/crc32"
	"io"
	"io/ioutil"
	"github.com/mreiferson/go-snappystream/snappy-go"
)
var errMissingStreamID = fmt.Errorf("missing stream identifier")
type reader struct {
	reader io.Reader
	err error
	seenStreamID   bool
	verifyChecksum bool
	buf bytes.Buffer
	hdr []byte
	src []byte
	dst []byte
}