[英]What's the difference between File stream in C and iostream in C++?
C 中的文件(文件*指针)流和 C++ 中的 iostream 有什么区别?
为什么它们都叫stream,它们有什么共同点吗?
它们都处理文件,“流”只是一个非常笼统的术语,用于表示来自某些来源的数据。
区别主要是C++的iostream对象是类/对象,通过定义的f*()函数访问C文件数据。
所以基本上,相同的任务,不同的界面风格。
它们通常都是缓冲的,这意味着您在 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ 上执行的 I/O 与在底层系统 object(例如文件)上执行的 I/O 不匹配 1:1。
例如,读取 2 个字节的fread()
调用可能会尝试从文件中读取 1,024 个字节,如果您接近文件末尾,则可能只会返回 57。 stream 实现完全隐藏了差异,它将返回 2 个字节并记住它的缓冲区中还有 55 个字节。 因此,它将满足下一个读取请求,而根本不会达到文件级别。
编辑:值得指出的是,两种语言(分别为stderr
和cerr
)的默认错误流都没有缓冲。 这是一个巨大的胜利,因为它增加了让您的 output 及时出局的机会。 当通过使用printf()
语句散布代码来追踪奇怪的崩溃错误时,出于这个特殊原因,打印到错误 stream 是一个非常好的主意。
本文很好地概述了 C++ 中可供您使用的不同 output stream。
http://accu.org/index.php/journals/1539
它比较:
两者都是 OS I/O 子系统的不同接口。
C++ 流可通过 C 文件不可扩展的两种方式进行扩展:
在 C 和 Java 之间比较文件 stream
区分他们的熟悉程度比区分他们更容易,因为他们只有一个熟悉程度:他们都有一个在编程世界中很常见的术语(流)。
stream 通常用于指代未格式化的原始数据,它们只是一块二进制字节。 想想复制到新分配的 memory 的文件内容,在它们被解析之前(即它们被复制后的那一刻)它们对你来说只是一大块二进制字节。 所以你只有像 seek() 这样的方法来访问它们,它基于字节工作。
将其与您可以 ReadLine()、WriteLine() 的文本文件进行比较,它们在预格式化实体中工作(在这种情况下称为行)。 你会明白的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.