diff --git a/src/buf/iter.rs b/src/buf/iter.rs
index c4d47e92093507bc04b312b3bc2bb73f43801c20..9345c05b63d4494549930bdbe599827c02fce20f 100644
--- a/src/buf/iter.rs
+++ b/src/buf/iter.rs
@@ -112,3 +112,5 @@ impl<T: Buf> Iterator for Iter<T> {
         (rem, Some(rem))
     }
 }
+
+impl<T: Buf> ExactSizeIterator for Iter<T> { }
diff --git a/tests/test_iter.rs b/tests/test_iter.rs
new file mode 100644
index 0000000000000000000000000000000000000000..c16dbf694ba40680d8812de584569e13b6e6f5e1
--- /dev/null
+++ b/tests/test_iter.rs
@@ -0,0 +1,22 @@
+extern crate bytes;
+
+use bytes::{Buf, IntoBuf, Bytes};
+
+#[test]
+fn iter_len() {
+    let buf = Bytes::from(&b"hello world"[..]).into_buf();
+    let iter = buf.iter();
+
+    assert_eq!(iter.size_hint(), (11, Some(11)));
+    assert_eq!(iter.len(), 11);
+}
+
+
+#[test]
+fn empty_iter_len() {
+    let buf = Bytes::from(&b""[..]).into_buf();
+    let iter = buf.iter();
+
+    assert_eq!(iter.size_hint(), (0, Some(0)));
+    assert_eq!(iter.len(), 0);
+}