Browse Source

fix read from io.Reader, n == 0 is not eof

Tao Wen 9 năm trước cách đây
mục cha
commit
3e160d6f5d
1 tập tin đã thay đổi với 16 bổ sung11 xóa
  1. 16 11
      jsoniter.go

+ 16 - 11
jsoniter.go

@@ -73,20 +73,25 @@ func (iter *Iterator) readByte() (ret byte) {
 			iter.Error = io.EOF
 			return
 		}
-		n, err := iter.reader.Read(iter.buf)
-		if err != nil {
-			iter.Error = err
-			return
-		}
-		if n == 0 {
-			iter.Error = io.EOF
-			return
+		for {
+			n, err := iter.reader.Read(iter.buf)
+			if n == 0 {
+				if err != nil {
+					iter.Error = err
+					return
+				} else {
+					// n == 0, err == nil is not EOF
+					continue
+				}
+			} else {
+				iter.head = 0
+				iter.tail = n
+				break
+			}
 		}
-		iter.head = 0
-		iter.tail = n
 	}
 	ret = iter.buf[iter.head]
-	iter.head += 1
+	iter.head++
 	return ret
 }