diff --git a/jsoniter.go b/jsoniter.go
index 2eaf980..41d6001 100644
--- a/jsoniter.go
+++ b/jsoniter.go
@@ -504,73 +504,6 @@ func (iter *Iterator) ReadArray() (ret bool) {
 	}
 }
 
-func (iter *Iterator) ReadArrayCB(cb func()) {
-	c := iter.nextToken()
-	if c == 'n' {
-		iter.skipUntilBreak()
-		return // null
-	}
-	if c != '[' {
-		iter.ReportError("ReadArrayCB", "expect [ or n")
-		return
-	}
-	c = iter.nextToken()
-	if c == ']' {
-		return // []
-	} else {
-		iter.unreadByte()
-	}
-	for {
-		if iter.Error != nil {
-			return
-		}
-		cb()
-		c = iter.nextToken()
-		if c == ']' {
-			return
-		}
-		if c != ',' {
-			iter.ReportError("ReadArrayCB", "expect , or ]")
-			return
-		}
-		iter.skipWhitespaces()
-	}
-}
-
-func (iter *Iterator) ReadObjectCB(cb func(string)) {
-	c := iter.nextToken()
-	if c == 'n' {
-		iter.skipUntilBreak()
-		return // null
-	}
-	if c != '{' {
-		iter.ReportError("ReadObjectCB", "expect { or n")
-		return
-	}
-	c = iter.nextToken()
-	if c == '}' {
-		return // []
-	} else {
-		iter.unreadByte()
-	}
-	for {
-		iter.skipWhitespaces()
-		field := iter.readObjectField()
-		if iter.Error != nil {
-			return
-		}
-		cb(field)
-		c = iter.nextToken()
-		if c == '}' {
-			return // end of object
-		}
-		if c != ',' {
-			iter.ReportError("ReadObjectCB", `expect ,`)
-			return
-		}
-	}
-}
-
 func (iter *Iterator) ReadObject() (ret string) {
 	c := iter.nextToken()
 	if iter.Error != nil {
diff --git a/jsoniter_array_test.go b/jsoniter_array_test.go
index ffbf225..7deb9f5 100644
--- a/jsoniter_array_test.go
+++ b/jsoniter_array_test.go
@@ -50,17 +50,6 @@ func Test_two_elements(t *testing.T) {
 	}
 }
 
-func Test_two_elements_cb(t *testing.T) {
-	iter := ParseString(`[1,2]`)
-	total := int64(0)
-	iter.ReadArrayCB(func() {
-		total += iter.ReadInt64()
-	})
-	if total != 3 {
-		t.Fatal(total)
-	}
-}
-
 func Test_invalid_array(t *testing.T) {
 	iter := ParseString(`[`)
 	iter.ReadArray()
@@ -141,19 +130,6 @@ func Benchmark_jsoniter_array(b *testing.B) {
 	}
 }
 
-func Benchmark_jsoniter_array_cb(b *testing.B) {
-	b.ReportAllocs()
-	input := []byte(`[1,2,3,4,5,6,7,8,9]`)
-	iter := ParseBytes(input)
-	b.ResetTimer()
-	for n := 0; n < b.N; n++ {
-		iter.Reuse(input)
-		iter.ReadArrayCB(func() {
-			iter.ReadUint64()
-		})
-	}
-}
-
 func Benchmark_json_array(b *testing.B) {
 	for n := 0; n < b.N; n++ {
 		result := []interface{}{}
diff --git a/jsoniter_object_test.go b/jsoniter_object_test.go
index 2ccea53..42e4dcc 100644
--- a/jsoniter_object_test.go
+++ b/jsoniter_object_test.go
@@ -66,18 +66,6 @@ func Test_two_field(t *testing.T) {
 	}
 }
 
-func Test_cb(t *testing.T) {
-	iter := ParseString(`{ "a": "b" , "c": "d" }`)
-	count := 0
-	iter.ReadObjectCB(func(field string) {
-		iter.Skip()
-		count += 1
-	})
-	if count != 2 {
-		t.Fatal(count)
-	}
-}
-
 type TestObj struct {
 	Field1 string
 	Field2 uint64
@@ -100,23 +88,6 @@ func Benchmark_jsoniter_object(b *testing.B) {
 	}
 }
 
-func Benchmark_jsoniter_cb(b *testing.B) {
-	for n := 0; n < b.N; n++ {
-		iter := ParseString(`{"field1": "1", "field2": 2}`)
-		obj := TestObj{}
-		iter.ReadObjectCB(func(field string) {
-			switch field {
-			case "field1":
-				obj.Field1 = iter.ReadString()
-			case "field2":
-				obj.Field2 = iter.ReadUint64()
-			default:
-				iter.ReportError("bind object", "unexpected field")
-			}
-		})
-	}
-}
-
 func Benchmark_json_object(b *testing.B) {
 	for n := 0; n < b.N; n++ {
 		result := TestObj{}