提问人:MainID 提问时间:3/18/2009 更新时间:9/30/2015 访问量:4972
C 中的文件流和 C++ 中的 iostream 有什么区别?
What's the difference between File stream in C and iostream in C++?
答:
它们都处理文件,而“流”只是一个非常笼统的术语,指的是来自某个来源的数据。
区别主要在于 C++ 的 iostream 对象是类/对象,C 文件数据是通过定义的 f*() 函数访问的。
所以基本上,相同的任务,不同的界面风格。
它们通常都是缓冲的,这意味着您在流上执行的 I/O 与在基础系统对象(例如文件)上执行的 I/O 不匹配 1:1。
例如,读取 2 个字节的调用可能会尝试从文件中读取 1,024 个字节,如果您接近文件末尾,则可能只返回 57。流实现将返回 2 个字节,并记住其缓冲区中还有 55 个字节。因此,它将满足下一个读取请求,而不会达到文件级别。fread()
编辑:值得指出的是,两种语言(分别为和)的默认错误流都没有缓冲。这是一个巨大的胜利,因为它增加了及时输出的机会。当通过在代码中加入语句来追逐奇怪的崩溃错误时,出于这个特殊原因,打印到错误流是一个非常好的主意。stderr
cerr
printf()
评论
两者都是操作系统 I/O 子系统的不同接口。
评论
分辨它们的熟悉程度比区分它们更容易,因为他们只有一个熟悉度:它们都带有一个在编程世界中很常见的术语(流)。
stream 通常用于指代未格式化的原始数据,这些原始数据只是二进制字节的块。想想复制到新分配的内存中的文件内容,在它们被解析之前(即它们被复制后的那一刻),它们对你来说只是一块二进制字节。因此,您只有像 seek() 这样的方法来访问它们,它基于字节工作。
将其与可以 ReadLine()、WriteLine() 的文本文件进行比较,这些文本文件在预格式化实体(在本例中称为行)中工作。你会明白的。
C++ 流可以通过两种方式进行扩展,而 C 文件则不能:
- 您可以创建自己的流类型 所有可流式处理的对象都将 自动使用它。
- 如果为某个类定义了流运算符,则可以写入和读取该类的任何对象 来自任何流。
比较 C 和 Java 之间的文件流
评论