繁体   English   中英

C 中的文件 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ 和 C++ 中的 iostream 有什么区别?

[英]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 个字节。 因此,它将满足下一个读取请求,而根本不会达到文件级别。

编辑:值得指出的是,两种语言(分别为stderrcerr )的默认错误流都没有缓冲。 这是一个巨大的胜利,因为它增加了让您的 output 及时出局的机会。 当通过使用printf()语句散布代码来追踪奇怪的崩溃错误时,出于这个特殊原因,打印到错误 stream 是一个非常好的主意。

本文很好地概述了 C++ 中可供您使用的不同 output stream。

http://accu.org/index.php/journals/1539

它比较:

  • 文件
  • 标准::stream
  • Boost.Format
  • FastFormat(由撰写不完美 C++ 书的文章作者 Matthew Wilson 完成。)

两者都是 OS I/O 子系统的不同接口。

C++ 流可通过 C 文件不可扩展的两种方式进行扩展:

  • 您可以创建自己的 stream 类型,所有可流式传输的对象都将自动使用它。
  • If stream operators are defined for a class, any object of that class can be written to and read from any stream.

在 C 和 Java 之间比较文件 stream

区分他们的熟悉程度比区分他们更容易,因为他们只有一个熟悉程度:他们都有一个在编程世界中很常见的术语(流)。

stream 通常用于指代未格式化的原始数据,它们只是一块二进制字节。 想想复制到新分配的 memory 的文件内容,在它们被解析之前(即它们被复制后的那一刻)它们对你来说只是一大块二进制字节。 所以你只有像 seek() 这样的方法来访问它们,它基于字节工作。

将其与您可以 ReadLine()、WriteLine() 的文本文件进行比较,它们在预格式化实体中工作(在这种情况下称为行)。 你会明白的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM