187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
1 | |
Что быстрее - двоичный или текстовый файл?23.02.2014, 19:40. Показов 5661. Ответов 34
Метки нет (Все метки)
Встал вопрос о времени чтения данных с диска, посему нужно выбрать быстрейший из этих двух способов хранения данных на внешнем носителе.
Чисто логически я понимаю, что двоичный должен быть быстрее (более того, гораздо быстрее, если нужно считать данные с какого-то определенного места в файле), да и экономичнее по памяти. Однако вспомнил следующие слова своего преподавателя по программированию: - Текстовые файлы позволяют быстро считывать данные последовательно, но медленно в произвольном доступе, в то время как двоичные файлы позволяют быстро считывать данные с произвольного места, но медленно в последотвалельном. Теперь я думаю, что мой преподаватель ошибался.. или нет?
0
|
23.02.2014, 19:40 | |
Ответы с готовыми решениями:
34
Текстовый файл перевести в двоичный, а потом полученный двоичный файл перевести обратно в текстовый Что быстрее массив или файл Задан текстовый файл, необходимо по нему сформировать двоичный файл индексов Двоичный и текстовый файл на C++ |
Модератор
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,715
|
|
23.02.2014, 20:11 | 2 |
На самом деле операции ввода-вывода выполняются через буфер.
Поэтому разница почти незаметна.
0
|
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
23.02.2014, 20:25 [ТС] | 4 |
zss, "разница не заметна" - какая разница имеется в виду? И кто в этой разнице выигрывает? Кто быстрее то?
alsav22, вопрос в том, кто быстрее, а не что использовать :0
0
|
18848 / 9847 / 2408
Регистрация: 30.01.2014
Сообщений: 17,290
|
|
23.02.2014, 20:54 | 5 |
Сообщение было отмечено nexen как решение
Решение
Если говорить абстрактно, то с т.з. именно ввода-вывода никакой разницы вообще нет.
Однако если вернуться к практике, то открытие файла в текстовом режиме может повлечь за собой дополнительные операции, например замена \n на \n\r в windows. Справка по fopen как раз обо всем этом говорит:
1
|
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
24.02.2014, 07:37 [ТС] | 8 |
Байт, вот примерно такого ответа я и хотел.
Да нет, четко сказано было, что один выигрывает в одном случае, другой в другом. Всю мою детскую психику испортило эта "истина" от преподавателя :/
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
24.02.2014, 08:00 | 9 |
Все эти замены \n на \n\r вообще не относятся к чтению файла, это преобразование чисто прикладного фактического формата, а не чтение. Текстовый файл медленнее по другой причине. Как задаётся место в текстовом файле при произвольном доступе? Номерами символа и строки. Но строки имеют разную длину и чтоб найти, где нужная строка находится, надо последовательно прочитать и проанализировать файл от начала. Положение в бинарнике задаётся номером байта, все байты одинаковы, это позволяет вычислить, где конкретно нужный байт находится и сразу перейти к этому месту. С другой стороны, текстовый файл - байтовый. А бинарный? Бинарный может состоять из чего угодно и иметь чёрт знает какое выравнивание, иметь какой угодно порядок байт в словах, двойных словах, четверных словах..., что придётся учитывать при последовательном чтении. Возможно, придётся менять порядок байтов, менять выравнивание, или читать каждое данное отдельно. Все эти дополнительные операции замедляют чтение, но нужны не всегда. При последовательном же чтении текстового файла можно читать блок, что даёт максимальную скорость доступа. Возможно бинарник получится читать также, а может и нет.
0
|
18848 / 9847 / 2408
Регистрация: 30.01.2014
Сообщений: 17,290
|
|
24.02.2014, 16:53 | 11 |
Так ведь дело в том, что все что ты описал тоже ограничения "прикладного фактического формата". Т.к. файловой системе все равно какие данные хранить. А всякие выравнивания и количества байт появляются уже потом - с появлением фактического формата. Точно так же как и в текстовых форматах может существовать (xml, etc.), а может и не существовать (plain text) разметка.
Пора бы уже определиться в таком случае что мы считаем файлом. Мой пост рассматривал файл с т.з. файлового API - справка по fopen полностью соответствует моим словам.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
24.02.2014, 17:22 | 12 |
В случае бинарника всё перечисленное входит в операции чтения/записи и необходимо для того, чтоб подружить разные процессоры, а в случае текстового файла замена \n а \n\r и наоборот происходит только при преобразовании фактического формата, то есть при создании нового файла, созданного на основе существующего, но иначе закодированного и выполняется для удовлетворения вкусов приложения.
Добавлено через 53 секунды файл есть наименьшая именованная часть диска.
0
|
18848 / 9847 / 2408
Регистрация: 30.01.2014
Сообщений: 17,290
|
|
24.02.2014, 18:08 | 13 |
Мне кажется ты слишком узко понимаешь бинарную сериализацию.
Файловой системе все равно какие данные хранить. Она не делает различия текстовый файл или бинарный, само по себе разделение на текстовый и бинарный условно и служит целям "прикладного фактического формата". Любой текстовый файл является бинарным в понимании файловой системы. Соответственно с т.з. файлового API единственная разница в реализации операций ввода-вывода, может быть только в пресловутых "some special character conversions". А с т.з. файловой ситемы разницы нет вообще. А появляется она только когда бы ведем речь про сериализацию. Но сериализация сама по себе не привязана к файлам, файл это только способ хранения.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
24.02.2014, 18:14 | 14 |
А она то здесь при чём? Речь о том, что представление скалярных данных с sizeof>1 в оперативе зависит от процессора, а если они ещё и входят в объекты/структуры, то добавляется выравнивание для оптимизации доступа, причём, одному процессору имеет смысл равнять только одиночные, двойные и четверные слова, а другому и на восьмерные
0
|
18848 / 9847 / 2408
Регистрация: 30.01.2014
Сообщений: 17,290
|
|
24.02.2014, 18:22 | 15 |
Тогда причем здесь файлы?
Это все понятно, только как это относится к файлам? Сохранение данных в том виде, в котором они находятся в памяти - один из способов бинарной сериализации. К файлам это имеет отношение опосредованное.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
24.02.2014, 18:30 | 16 |
Ну мы же не колоду перфокарт обсуждаем?
Добавлено через 5 минут Прямо. Это только при ручном вводе местная реализация потока сама разберётся, как расположить байты в шотинте, а при файловом вводе/выводе если ты положишься только на сериализацю/десерриализацию, то макинтош, моторолла, или ваще какая нибудь экотика тебе элементарно сохранит в порядке байт, который интел не переварит, и 257 превратится в 513, чтоб этого не произошло, порядок байт оговаривается в файловом формате, а при несовпадении с процессорным порядком байты меняются местами при каждом чтении/записи.
0
|
18848 / 9847 / 2408
Регистрация: 30.01.2014
Сообщений: 17,290
|
|
24.02.2014, 18:35 | 17 |
Я всего лишь хотел указать на некоторое смысловое различие между файлом как таковым (в терминах файловой системы и файлового API ввода-вывода) и форматом, который в этот файл можно поместить. Для этого и были заданы некоторые уточняющие вопросы чтобы понять что понимается тобой под файлом.
Если бы мы рассматривали файл, как он понимается в системах UNIX, то доводы были бы несколько иными. Не зря alsav22 спрашивал про характер данных, это очень важно для правильной оценки ситуации. Добавлено через 3 минуты Это утверждение выдало, что ты не до конца понимаешь что такое сериализация. Вот именно, что в формате.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
24.02.2014, 18:38 | 18 |
В отрыве от формата всякое обсуждение файлов сводится лишь к общим словам опять таки о форматах.
0
|
18848 / 9847 / 2408
Регистрация: 30.01.2014
Сообщений: 17,290
|
|
24.02.2014, 18:41 | 19 |
Наконец-то ты понял
В отрыве от формата файл можно обсуждать в терминах файловой системы (что и было сделано).
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
24.02.2014, 18:43 | 20 |
Ещё раз. С бинарным форматом могут не совпасть особенности процессора, что вынудит выполнять преобразования порядка/выравнивания при каждом чтении/-записи, а с текстовым форматом могут не совпасть только вкусы пользователя и приложения и замены выносятся в отдельную операцию преобразования формата.
Добавлено через 1 минуту Это если ты делаешь саму файловую систему или операционную систему.
0
|
24.02.2014, 18:43 | |
24.02.2014, 18:43 | |
Помогаю со студенческими работами здесь
20
Что быстрее? Запись в файл или в БД? Вывод результата программы в текстовый файл и в двоичный файл с именем, задаваемым пользователем Создать текстовый файл и записать в двоичный файл Как скопировать текст с консоли (например, то, что вывела программа или ipcоnfig) в текстовый файл? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |