istream_iterator和istreambuf_iterator的本质区别在哪里?解决方法

istream_iterator和istreambuf_iterator的本质区别在哪里?
MSDN上面
istream_iterator的解释是
The template class describes an input iterator object. It extracts objects of class U from an input stream, which it accesses via an object it stores, of type pointer to basic_istream<E, T>. After constructing or incrementing an object of class istream_iterator with a non-null stored pointer, the object attempts to extract and store an object of type U from the associated input stream. If the extraction fails, the object effectively replaces the stored pointer with a null pointer (thus making an end-of-sequence indicator).

istreambuf_iterator的解释是
The template class describes an input iterator object. It extracts elements of class E from an input stream buffer, which it accesses via an object it stores, of type pointer to basic_streambuf<E, T>. After constructing or incrementing an object of class istreambuf_iterator with a non-null stored pointer, the object effectively attempts to extract and store an object of type E from the associated itput stream. (The extraction may be delayed, however, until the object is actually dereferenced or copied.) If the extraction fails, the object effectively replaces the stored pointer with a null pointer (thus making an end-of-sequence indicator).

这两个解释我感觉怎么都一样呢? 除了个别词语换了一个代词以外,全都一样。
不过既然是两个不同的类型,名字不一样,我向功能也应该有差别啊。

版上的c++高手解释一下哈!

------解决方案--------------------
假设我们要把一个文本文件拷贝到一个字符串对象中。可以这样来操作

C/C++ code
ifstream inputFile("interestingData.txt");
inputFile.unsetf(ios::skipws);    // 关闭inputFile的忽略空格标志
string fileData((istream_iterator<char>(inputFile)), istream_iterator<char>());