В чем разница между Файловым потоком в C и iostream в C ++? - PullRequest
3 голосов
/ 18 марта 2009

В чем разница между потоком File (File * pointer) в C и iostream в C ++?

Почему их обоих называют потоком, у них есть что-то общее?

Ответы [ 7 ]

9 голосов
/ 18 марта 2009

Они оба имеют дело с файлами, и «поток» - это просто очень общий термин для данных, которые собираются в виде кусков из какого-то источника.

Разница в основном в том, что объекты iostream в C ++ являются классами / объектами, а доступ к данным файла C осуществляется через определенные функции f * ().

Так что в основном та же задача, другой стиль интерфейса.

5 голосов
/ 18 марта 2009

Они оба обычно буферизуются, что означает, что ввод / вывод, который вы выполняете в потоке, не соответствует 1: 1 вводу / выводу, выполненному для базового системного объекта (например, файла).

Например, fread() вызов для чтения 2 байтов может попытаться прочитать 1024 байта из файла, который, в свою очередь, может вернуть только 57, если вы были так близко к концу файла. Разница скрыта за реализацией потока, который вернет 2 байта и помнит, что у него есть еще 55 в буферах. Таким образом, он будет удовлетворять следующий запрос на чтение, не затрагивая уровень файла вообще.

EDIT: Стоит отметить, что потоки ошибок по умолчанию на обоих языках (stderr и cerr соответственно) не буферизируются. Это большая победа, поскольку она увеличивает шансы на своевременное получение результатов. Когда вы преследуете странные баги с ошибками путем разбрызгивания кода с помощью операторов printf(), по этой конкретной причине очень полезно печатать в потоке ошибок.

3 голосов
/ 18 марта 2009

Эта статья дает хороший обзор различных потоков вывода, доступных вам в C ++.

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

Сравнивает:

  • FILE
  • станд :: поток
  • Boost.Format
  • FastFormat (сделано автором статьи Мэтью Уилсоном, написавшим книгу «Несовершенный С ++».)
2 голосов
/ 18 марта 2009

Оба являются разными интерфейсами для подсистемы ввода / вывода ОС.

1 голос
/ 18 марта 2009

C ++ Потоки расширяются двумя способами, чем C-файлы:

  • Вы можете создать свой собственный тип потока и все потоковые объекты будут автоматически работать с ним.
  • Если для класса определены потоковые операторы, любой объект этого класса может быть записан и прочитан из любого потока.
0 голосов
/ 25 августа 2009

сравнить поток файлов между C и Java

0 голосов
/ 18 марта 2009

легче сказать их знакомство, чем различия, потому что у них только одно знакомство: они оба несут один термин (поток), который распространен в мире программирования.

Поток

часто используется для ссылки на неформатированные необработанные данные, которые представляют собой просто кусок двоичных байтов. Подумайте о содержимом файла, которое копируется во вновь выделенную память, прежде чем они будут проанализированы (то есть сразу после того, как они скопированы), они для вас просто кусок двоичных байтов. Таким образом, у вас есть только методы типа seek () для доступа к ним, которые работают на основе байтов.

Сравните это с текстовыми файлами, которые вы можете использовать ReadLine (), WriteLine (), которые работают в предварительно отформатированных объектах (в данном случае называемых строками). Вы поймете идею.

...