Read same as io.MultiReader
(p []byte)
| 102 | |
| 103 | // Read same as io.MultiReader |
| 104 | func (mr *multiReaderAt) Read(p []byte) (n int, err error) { |
| 105 | for len(mr.readers) > 0 { |
| 106 | n, err = mr.readers[0].Read(p) |
| 107 | if n > 0 || err != io.EOF { |
| 108 | if err == io.EOF { |
| 109 | // Don't return EOF yet. There may be more bytes |
| 110 | // in the remaining readers. |
| 111 | err = nil |
| 112 | } |
| 113 | return |
| 114 | } |
| 115 | mr.readers = mr.readers[1:] |
| 116 | } |
| 117 | return 0, io.EOF |
| 118 | } |
| 119 | |
| 120 | // ReadAt is the magic sauce. Heavily commented to include all logic. |
| 121 | func (mr *multiReaderAt) ReadAt(p []byte, off int64) (n int, err error) { |