sizable_zero_reader.go 492 B

1234567891011121314151617181920212223242526272829303132333435
  1. package main
  2. import "io"
  3. type SizableZeroReader struct {
  4. sz int
  5. }
  6. func NewSizableZeroReader(sz int) *SizableZeroReader {
  7. r := &SizableZeroReader{sz: sz}
  8. return r
  9. }
  10. func (s *SizableZeroReader) Read(p []byte) (n int, err error) {
  11. l := len(p)
  12. var al int
  13. if s.sz > l {
  14. al = l
  15. s.sz = s.sz - l
  16. } else {
  17. al = s.sz
  18. s.sz = 0
  19. }
  20. for i := 0; i < al; i++ {
  21. p[i] = 0
  22. }
  23. if al < l {
  24. return al, io.EOF
  25. }
  26. return al, nil
  27. }
  28. func (s *SizableZeroReader) Close() error {
  29. return nil
  30. }