Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335

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

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

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

Теперь я думаю, что мой преподаватель ошибался.. или нет?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.02.2014, 19:40
Ответы с готовыми решениями:

Текстовый файл перевести в двоичный, а потом полученный двоичный файл перевести обратно в текстовый
Всем привет. Есть такая задачка: "текстовый файл перевести в двоичный, а потом полученный двоичный файл перевести обратно в текстовый"...

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

Задан текстовый файл, необходимо по нему сформировать двоичный файл индексов
Нужна помощь! Задача: Задан текстовый файл, необходимо по нему сформировать двоичный файл индексов (смещений начал строк в текстовом...

34
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,236
23.02.2014, 20:11
На самом деле операции ввода-вывода выполняются через буфер.
Поэтому разница почти незаметна.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.02.2014, 20:23
Потоки не использовать. С-шные функции намного быстрее работают.

Добавлено через 4 минуты
Цитата Сообщение от nexen Посмотреть сообщение
Встал вопрос о времени чтения данных с диска,
Можно мапировать файл. Тогда совсем быстро будет.
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
23.02.2014, 20:25  [ТС]
zss, "разница не заметна" - какая разница имеется в виду? И кто в этой разнице выигрывает? Кто быстрее то?
alsav22, вопрос в том, кто быстрее, а не что использовать :0
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
23.02.2014, 20:54
Лучший ответ Сообщение было отмечено nexen как решение

Решение

Если говорить абстрактно, то с т.з. именно ввода-вывода никакой разницы вообще нет.
Однако если вернуться к практике, то открытие файла в текстовом режиме может повлечь за собой дополнительные операции, например замена \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.
Если же под текстовыми файлами имелись в виду текстовые или бинарные форматы. То сохранение данных в бинарном формате естественно быстрее. Потому что представление данных в текстовом формате во-первых избыточно, во-вторых требует дополнительных преобразований данных (например число->строка).
1
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.02.2014, 21:04
nexen, данные из себя что представляют?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
23.02.2014, 21:39
Цитата Сообщение от nexen Посмотреть сообщение
как двоичные файлы позволяют быстро считывать данные с произвольного места, но медленно в последовательном.
Чушь!

Добавлено через 1 минуту
Цитата Сообщение от nexen Посмотреть сообщение
мой преподаватель ошибался.. или нет?
Возможно, вы неправильно друг друга поняли.
2
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
24.02.2014, 07:37  [ТС]
Байт, вот примерно такого ответа я и хотел.
Да нет, четко сказано было, что один выигрывает в одном случае, другой в другом. Всю мою детскую психику испортило эта "истина" от преподавателя :/
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.02.2014, 08:00
Все эти замены \n на \n\r вообще не относятся к чтению файла, это преобразование чисто прикладного фактического формата, а не чтение. Текстовый файл медленнее по другой причине. Как задаётся место в текстовом файле при произвольном доступе? Номерами символа и строки. Но строки имеют разную длину и чтоб найти, где нужная строка находится, надо последовательно прочитать и проанализировать файл от начала. Положение в бинарнике задаётся номером байта, все байты одинаковы, это позволяет вычислить, где конкретно нужный байт находится и сразу перейти к этому месту. С другой стороны, текстовый файл - байтовый. А бинарный? Бинарный может состоять из чего угодно и иметь чёрт знает какое выравнивание, иметь какой угодно порядок байт в словах, двойных словах, четверных словах..., что придётся учитывать при последовательном чтении. Возможно, придётся менять порядок байтов, менять выравнивание, или читать каждое данное отдельно. Все эти дополнительные операции замедляют чтение, но нужны не всегда. При последовательном же чтении текстового файла можно читать блок, что даёт максимальную скорость доступа. Возможно бинарник получится читать также, а может и нет.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
24.02.2014, 16:24
Цитата Сообщение от taras atavin Посмотреть сообщение
С другой стороны, текстовый файл - байтовый. А бинарный? Бинарный может состоять из чего угодно и иметь чёрт знает какое выравнивание, иметь какой угодно порядок байт в словах, двойных словах, четверных словах..., что придётся учитывать при последовательном чтении. Возможно, придётся менять порядок байтов, менять выравнивание, или читать каждое данное отдельно.
Очего и вопрос был:
Цитата Сообщение от alsav22 Посмотреть сообщение
nexen, данные из себя что представляют?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
24.02.2014, 16:53
Цитата Сообщение от taras atavin Посмотреть сообщение
Все эти замены \n на \n\r вообще не относятся к чтению файла, это преобразование чисто прикладного фактического формата, а не чтение.
Так ведь дело в том, что все что ты описал тоже ограничения "прикладного фактического формата". Т.к. файловой системе все равно какие данные хранить. А всякие выравнивания и количества байт появляются уже потом - с появлением фактического формата. Точно так же как и в текстовых форматах может существовать (xml, etc.), а может и не существовать (plain text) разметка.
Пора бы уже определиться в таком случае что мы считаем файлом. Мой пост рассматривал файл с т.з. файлового API - справка по fopen полностью соответствует моим словам.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.02.2014, 17:22
Цитата Сообщение от DrOffset Посмотреть сообщение
Так ведь дело в том, что все что ты описал тоже ограничения "прикладного фактического формата".
В случае бинарника всё перечисленное входит в операции чтения/записи и необходимо для того, чтоб подружить разные процессоры, а в случае текстового файла замена \n а \n\r и наоборот происходит только при преобразовании фактического формата, то есть при создании нового файла, созданного на основе существующего, но иначе закодированного и выполняется для удовлетворения вкусов приложения.

Добавлено через 53 секунды
Цитата Сообщение от DrOffset Посмотреть сообщение
Пора бы уже определиться в таком случае что мы считаем файлом.
файл есть наименьшая именованная часть диска.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
24.02.2014, 18:08
Цитата Сообщение от taras atavin Посмотреть сообщение
В случае бинарника всё перечисленное входит в операции чтения/записи и необходимо для того, чтоб подружить разные процессоры
Мне кажется ты слишком узко понимаешь бинарную сериализацию.
Файловой системе все равно какие данные хранить. Она не делает различия текстовый файл или бинарный, само по себе разделение на текстовый и бинарный условно и служит целям "прикладного фактического формата". Любой текстовый файл является бинарным в понимании файловой системы. Соответственно с т.з. файлового API единственная разница в реализации операций ввода-вывода, может быть только в пресловутых "some special character conversions". А с т.з. файловой ситемы разницы нет вообще. А появляется она только когда бы ведем речь про сериализацию. Но сериализация сама по себе не привязана к файлам, файл это только способ хранения.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.02.2014, 18:14
Цитата Сообщение от DrOffset Посмотреть сообщение
Файловой системе все равно какие данные хранить.
А она то здесь при чём? Речь о том, что представление скалярных данных с sizeof>1 в оперативе зависит от процессора, а если они ещё и входят в объекты/структуры, то добавляется выравнивание для оптимизации доступа, причём, одному процессору имеет смысл равнять только одиночные, двойные и четверные слова, а другому и на восьмерные
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
24.02.2014, 18:22
Цитата Сообщение от taras atavin Посмотреть сообщение
А она то здесь при чём?
Тогда причем здесь файлы?

Цитата Сообщение от taras atavin Посмотреть сообщение
Речь о том, что представление скалярных данных с sizeof>1 в оперативе зависит от процессора, а если они ещё и входят в объекты/структуры, то добавляется выравнивание для оптимизации доступа, причём, одному процессору имеет смысл равнять только одиночные, двойные и четверные слова, а другому и на восьмерные
Это все понятно, только как это относится к файлам? Сохранение данных в том виде, в котором они находятся в памяти - один из способов бинарной сериализации. К файлам это имеет отношение опосредованное.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.02.2014, 18:30
Цитата Сообщение от DrOffset Посмотреть сообщение
Тогда причем здесь файлы?
Ну мы же не колоду перфокарт обсуждаем?

Добавлено через 5 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
Это все понятно, только как это относится к файлам?
Прямо. Это только при ручном вводе местная реализация потока сама разберётся, как расположить байты в шотинте, а при файловом вводе/выводе если ты положишься только на сериализацю/десерриализацию, то макинтош, моторолла, или ваще какая нибудь экотика тебе элементарно сохранит в порядке байт, который интел не переварит, и 257 превратится в 513, чтоб этого не произошло, порядок байт оговаривается в файловом формате, а при несовпадении с процессорным порядком байты меняются местами при каждом чтении/записи.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
24.02.2014, 18:35
Цитата Сообщение от taras atavin Посмотреть сообщение
Ну мы же не колоду перфокарт обсуждаем?
Я всего лишь хотел указать на некоторое смысловое различие между файлом как таковым (в терминах файловой системы и файлового API ввода-вывода) и форматом, который в этот файл можно поместить. Для этого и были заданы некоторые уточняющие вопросы чтобы понять что понимается тобой под файлом.
Если бы мы рассматривали файл, как он понимается в системах UNIX, то доводы были бы несколько иными.
Не зря alsav22 спрашивал про характер данных, это очень важно для правильной оценки ситуации.

Добавлено через 3 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
если ты положишься только на сериализацю/десерриализацию, то макинтош, моторолла, или ваще какая нибудь экотика тебе элементарно сохранит в порядке байт, который интел не переварит
Это утверждение выдало, что ты не до конца понимаешь что такое сериализация.
Цитата Сообщение от taras atavin Посмотреть сообщение
порядок байт оговаривается в файловом формате
Вот именно, что в формате.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.02.2014, 18:38
Цитата Сообщение от DrOffset Посмотреть сообщение
Я всего лишь хотел указать на некоторое смысловое различие между файлом как таковым (в терминах файловой системы и файлового API ввода-вывода) и форматом, который в этот файл можно поместить.
В отрыве от формата всякое обсуждение файлов сводится лишь к общим словам опять таки о форматах.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
24.02.2014, 18:41
Цитата Сообщение от taras atavin Посмотреть сообщение
В отрыве от формата всякое обсуждение файлов сводится лишь к общим словам опять таки о форматах.
Наконец-то ты понял
В отрыве от формата файл можно обсуждать в терминах файловой системы (что и было сделано).
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.02.2014, 18:43
Цитата Сообщение от DrOffset Посмотреть сообщение
Вот именно, что в формате.
Ещё раз. С бинарным форматом могут не совпасть особенности процессора, что вынудит выполнять преобразования порядка/выравнивания при каждом чтении/-записи, а с текстовым форматом могут не совпасть только вкусы пользователя и приложения и замены выносятся в отдельную операцию преобразования формата.

Добавлено через 1 минуту
Цитата Сообщение от DrOffset Посмотреть сообщение
В отрыве от формата файл можно обсуждать в терминах файловой системы (что и было сделано).
Это если ты делаешь саму файловую систему или операционную систему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.02.2014, 18:43
Помогаю со студенческими работами здесь

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

Что быстрее? Запись в файл или в БД?
При какой записи нагрузка на сервер меньше? при записи в бд или в *.txt?

Вывод результата программы в текстовый файл и в двоичный файл с именем, задаваемым пользователем
Подскажите пожалуйста, что нужно исправить. Нужно организовать вывод результата программы в текстовый файл и в двоичный файл с именем,...

Создать текстовый файл и записать в двоичный файл
В программах необходимо использовать только динамические структуры. 1. Написать первую программу, которая считывает информацию из...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru