Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

Что быстрее - двоичный или текстовый файл? - C++

23.02.2014, 19:40. Просмотров 1258. Ответов 34
Метки нет (Все метки)

Встал вопрос о времени чтения данных с диска, посему нужно выбрать быстрейший из этих двух способов хранения данных на внешнем носителе.
Чисто логически я понимаю, что двоичный должен быть быстрее (более того, гораздо быстрее, если нужно считать данные с какого-то определенного места в файле), да и экономичнее по памяти. Однако вспомнил следующие слова своего преподавателя по программированию:
- Текстовые файлы позволяют быстро считывать данные последовательно, но медленно в произвольном доступе, в то время как двоичные файлы позволяют быстро считывать данные с произвольного места, но медленно в последотвалельном.

Теперь я думаю, что мой преподаватель ошибался.. или нет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2014, 19:40     Что быстрее - двоичный или текстовый файл?
Посмотрите здесь:

Что быстрее массив или файл - C++
Привет! Я тут занялся обработкой содержимого текстовых файлов для этого пишу класс отслеживающий положение курсора в файле (типа номер...

Двоичный и текстовый файл на C++ - C++
Задача Создать двоичный файл и записать в него n целых чисел. Из файла сформировать массив, записав в него только кратные M значения,...

Как скопировать текст с консоли (например, то, что вывела программа или ipcоnfig) в текстовый файл? - C++
Заключается все в том что надо скопировать например :( (что вывела программа или ipcоnfig к примеру ) и потом записать в файл. Как...

Что быстрее: i++ или ++i ? - C++
Только что прочитала в интернете, что префиксный итератор быстрее, чем постфиксный. Так ли это? Если так и если в С++ все есть обьект, то...

Что быстрее assembler или c++ - C++
Вопрос от новичка. Что будет быстрее по скорости выполнения и на сколько: 1) сложить a+b на C++ или на assembler 2) умножить a*b на C++...

If или switch().case. Что быстрее - C++
Есть два кода. Первый: if(a == 2) a += 2; if(a == 3) a+= 3; if(a == 4) a+=4; Второй:

Что быстрее, операция присваивания или сравнения? - C++
Всем доброго времени суток, такой вод у меня дурацкий вопрос сидит в голове, "Что быстрее, операция присваивания или сравнения?". Вот...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6322 / 5906 / 1913
Регистрация: 18.12.2011
Сообщений: 15,189
Завершенные тесты: 1
23.02.2014, 20:11     Что быстрее - двоичный или текстовый файл? #2
На самом деле операции ввода-вывода выполняются через буфер.
Поэтому разница почти незаметна.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.02.2014, 20:23     Что быстрее - двоичный или текстовый файл? #3
Потоки не использовать. С-шные функции намного быстрее работают.

Добавлено через 4 минуты
Цитата Сообщение от nexen Посмотреть сообщение
Встал вопрос о времени чтения данных с диска,
Можно мапировать файл. Тогда совсем быстро будет.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
23.02.2014, 20:25  [ТС]     Что быстрее - двоичный или текстовый файл? #4
zss, "разница не заметна" - какая разница имеется в виду? И кто в этой разнице выигрывает? Кто быстрее то?
alsav22, вопрос в том, кто быстрее, а не что использовать :0
DrOffset
7062 / 4203 / 949
Регистрация: 30.01.2014
Сообщений: 6,969
23.02.2014, 20:54     Что быстрее - двоичный или текстовый файл? #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если говорить абстрактно, то с т.з. именно ввода-вывода никакой разницы вообще нет.
Однако если вернуться к практике, то открытие файла в текстовом режиме может повлечь за собой дополнительные операции, например замена \n на \n\r в windows.
Справка по fopen как раз обо всем этом говорит:
Depending on the environment where the application runs, some special character conversion may occur in input/output operations in text mode to adapt them to a system-specific text file format. Although on some environments no conversions occur and both text files and binary files are treated the same way, using the appropriate mode improves portability.
Если же под текстовыми файлами имелись в виду текстовые или бинарные форматы. То сохранение данных в бинарном формате естественно быстрее. Потому что представление данных в текстовом формате во-первых избыточно, во-вторых требует дополнительных преобразований данных (например число->строка).
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.02.2014, 21:04     Что быстрее - двоичный или текстовый файл? #6
nexen, данные из себя что представляют?
Байт
Эксперт C
15848 / 10175 / 1525
Регистрация: 24.12.2010
Сообщений: 19,186
23.02.2014, 21:39     Что быстрее - двоичный или текстовый файл? #7
Цитата Сообщение от nexen Посмотреть сообщение
как двоичные файлы позволяют быстро считывать данные с произвольного места, но медленно в последовательном.
Чушь!

Добавлено через 1 минуту
Цитата Сообщение от nexen Посмотреть сообщение
мой преподаватель ошибался.. или нет?
Возможно, вы неправильно друг друга поняли.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
24.02.2014, 07:37  [ТС]     Что быстрее - двоичный или текстовый файл? #8
Байт, вот примерно такого ответа я и хотел.
Да нет, четко сказано было, что один выигрывает в одном случае, другой в другом. Всю мою детскую психику испортило эта "истина" от преподавателя :/
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.02.2014, 08:00     Что быстрее - двоичный или текстовый файл? #9
Все эти замены \n на \n\r вообще не относятся к чтению файла, это преобразование чисто прикладного фактического формата, а не чтение. Текстовый файл медленнее по другой причине. Как задаётся место в текстовом файле при произвольном доступе? Номерами символа и строки. Но строки имеют разную длину и чтоб найти, где нужная строка находится, надо последовательно прочитать и проанализировать файл от начала. Положение в бинарнике задаётся номером байта, все байты одинаковы, это позволяет вычислить, где конкретно нужный байт находится и сразу перейти к этому месту. С другой стороны, текстовый файл - байтовый. А бинарный? Бинарный может состоять из чего угодно и иметь чёрт знает какое выравнивание, иметь какой угодно порядок байт в словах, двойных словах, четверных словах..., что придётся учитывать при последовательном чтении. Возможно, придётся менять порядок байтов, менять выравнивание, или читать каждое данное отдельно. Все эти дополнительные операции замедляют чтение, но нужны не всегда. При последовательном же чтении текстового файла можно читать блок, что даёт максимальную скорость доступа. Возможно бинарник получится читать также, а может и нет.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.02.2014, 16:24     Что быстрее - двоичный или текстовый файл? #10
Цитата Сообщение от taras atavin Посмотреть сообщение
С другой стороны, текстовый файл - байтовый. А бинарный? Бинарный может состоять из чего угодно и иметь чёрт знает какое выравнивание, иметь какой угодно порядок байт в словах, двойных словах, четверных словах..., что придётся учитывать при последовательном чтении. Возможно, придётся менять порядок байтов, менять выравнивание, или читать каждое данное отдельно.
Очего и вопрос был:
Цитата Сообщение от alsav22 Посмотреть сообщение
nexen, данные из себя что представляют?
DrOffset
7062 / 4203 / 949
Регистрация: 30.01.2014
Сообщений: 6,969
24.02.2014, 16:53     Что быстрее - двоичный или текстовый файл? #11
Цитата Сообщение от taras atavin Посмотреть сообщение
Все эти замены \n на \n\r вообще не относятся к чтению файла, это преобразование чисто прикладного фактического формата, а не чтение.
Так ведь дело в том, что все что ты описал тоже ограничения "прикладного фактического формата". Т.к. файловой системе все равно какие данные хранить. А всякие выравнивания и количества байт появляются уже потом - с появлением фактического формата. Точно так же как и в текстовых форматах может существовать (xml, etc.), а может и не существовать (plain text) разметка.
Пора бы уже определиться в таком случае что мы считаем файлом. Мой пост рассматривал файл с т.з. файлового API - справка по fopen полностью соответствует моим словам.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.02.2014, 17:22     Что быстрее - двоичный или текстовый файл? #12
Цитата Сообщение от DrOffset Посмотреть сообщение
Так ведь дело в том, что все что ты описал тоже ограничения "прикладного фактического формата".
В случае бинарника всё перечисленное входит в операции чтения/записи и необходимо для того, чтоб подружить разные процессоры, а в случае текстового файла замена \n а \n\r и наоборот происходит только при преобразовании фактического формата, то есть при создании нового файла, созданного на основе существующего, но иначе закодированного и выполняется для удовлетворения вкусов приложения.

Добавлено через 53 секунды
Цитата Сообщение от DrOffset Посмотреть сообщение
Пора бы уже определиться в таком случае что мы считаем файлом.
файл есть наименьшая именованная часть диска.
DrOffset
7062 / 4203 / 949
Регистрация: 30.01.2014
Сообщений: 6,969
24.02.2014, 18:08     Что быстрее - двоичный или текстовый файл? #13
Цитата Сообщение от taras atavin Посмотреть сообщение
В случае бинарника всё перечисленное входит в операции чтения/записи и необходимо для того, чтоб подружить разные процессоры
Мне кажется ты слишком узко понимаешь бинарную сериализацию.
Файловой системе все равно какие данные хранить. Она не делает различия текстовый файл или бинарный, само по себе разделение на текстовый и бинарный условно и служит целям "прикладного фактического формата". Любой текстовый файл является бинарным в понимании файловой системы. Соответственно с т.з. файлового API единственная разница в реализации операций ввода-вывода, может быть только в пресловутых "some special character conversions". А с т.з. файловой ситемы разницы нет вообще. А появляется она только когда бы ведем речь про сериализацию. Но сериализация сама по себе не привязана к файлам, файл это только способ хранения.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.02.2014, 18:14     Что быстрее - двоичный или текстовый файл? #14
Цитата Сообщение от DrOffset Посмотреть сообщение
Файловой системе все равно какие данные хранить.
А она то здесь при чём? Речь о том, что представление скалярных данных с sizeof>1 в оперативе зависит от процессора, а если они ещё и входят в объекты/структуры, то добавляется выравнивание для оптимизации доступа, причём, одному процессору имеет смысл равнять только одиночные, двойные и четверные слова, а другому и на восьмерные
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2014, 18:22     Что быстрее - двоичный или текстовый файл?
Еще ссылки по теме:

Файл с матрицей двоичный или простой - C++
Скажите пожалуйста в файле дана матрица в которой первая строка одно целое число,остальные строки это действительные числа.Это двоичный...

Что быстрее/эффективнее malloc/realloc или new/delete? - C++
Всем привет. Год программировал на СИ под микроконтроллеры... Начал изучать с++... Всё ново, интересно... Доковырялся до STL... В процессе...

Оптимизация. Что быстрее работает: cout или printf - C++
Что быстрее работает: cout или printf ????????? Добавлено через 32 минуты ЕЩе вот что: Как выводить число типа флоат с 2 знаками...

Файл: Переписать один текстовый файл в другой при условии, что все двойные пробелы буду заменены одинарными - C++
Здравствуйте, помогите, пожалуйста, с заданием, а то все мои идеи нерабочие совсем. Задание: Переписать один текстовій файл в другой при...

Что быстрее использовать, массив э-в, или указатель на массив э-в? - C++
уважаемые, что быстрее использовать, массив э-в, или указатель на массив э-в? или без разницы? С одной стороны обращается все к той же...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DrOffset
7062 / 4203 / 949
Регистрация: 30.01.2014
Сообщений: 6,969
24.02.2014, 18:22     Что быстрее - двоичный или текстовый файл? #15
Цитата Сообщение от taras atavin Посмотреть сообщение
А она то здесь при чём?
Тогда причем здесь файлы?

Цитата Сообщение от taras atavin Посмотреть сообщение
Речь о том, что представление скалярных данных с sizeof>1 в оперативе зависит от процессора, а если они ещё и входят в объекты/структуры, то добавляется выравнивание для оптимизации доступа, причём, одному процессору имеет смысл равнять только одиночные, двойные и четверные слова, а другому и на восьмерные
Это все понятно, только как это относится к файлам? Сохранение данных в том виде, в котором они находятся в памяти - один из способов бинарной сериализации. К файлам это имеет отношение опосредованное.
Yandex
Объявления
24.02.2014, 18:22     Что быстрее - двоичный или текстовый файл?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru