Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

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

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

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

34
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
24.02.2014, 18:30 #16
Цитата Сообщение от DrOffset Посмотреть сообщение
Тогда причем здесь файлы?
Ну мы же не колоду перфокарт обсуждаем?

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

Добавлено через 3 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
если ты положишься только на сериализацю/десерриализацию, то макинтош, моторолла, или ваще какая нибудь экотика тебе элементарно сохранит в порядке байт, который интел не переварит
Это утверждение выдало, что ты не до конца понимаешь что такое сериализация.
Цитата Сообщение от taras atavin Посмотреть сообщение
порядок байт оговаривается в файловом формате
Вот именно, что в формате.
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
24.02.2014, 18:38 #18
Цитата Сообщение от DrOffset Посмотреть сообщение
Я всего лишь хотел указать на некоторое смысловое различие между файлом как таковым (в терминах файловой системы и файлового API ввода-вывода) и форматом, который в этот файл можно поместить.
В отрыве от формата всякое обсуждение файлов сводится лишь к общим словам опять таки о форматах.
0
DrOffset
7517 / 4513 / 1025
Регистрация: 30.01.2014
Сообщений: 7,362
24.02.2014, 18:41 #19
Цитата Сообщение от taras atavin Посмотреть сообщение
В отрыве от формата всякое обсуждение файлов сводится лишь к общим словам опять таки о форматах.
Наконец-то ты понял
В отрыве от формата файл можно обсуждать в терминах файловой системы (что и было сделано).
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
24.02.2014, 18:43 #20
Цитата Сообщение от DrOffset Посмотреть сообщение
Вот именно, что в формате.
Ещё раз. С бинарным форматом могут не совпасть особенности процессора, что вынудит выполнять преобразования порядка/выравнивания при каждом чтении/-записи, а с текстовым форматом могут не совпасть только вкусы пользователя и приложения и замены выносятся в отдельную операцию преобразования формата.

Добавлено через 1 минуту
Цитата Сообщение от DrOffset Посмотреть сообщение
В отрыве от формата файл можно обсуждать в терминах файловой системы (что и было сделано).
Это если ты делаешь саму файловую систему или операционную систему.
0
DrOffset
7517 / 4513 / 1025
Регистрация: 30.01.2014
Сообщений: 7,362
24.02.2014, 18:47 #21
Цитата Сообщение от taras atavin Посмотреть сообщение
С бинарным форматом могут не совпасть особенности процессора
Еще раз, пройди по ссылке и узри, что бинарных форматов - тысячи. А сохранение памяти как она есть на диск - это только маленький частный случай, про подводные камни которого все знают

Добавлено через 3 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
Это если ты делаешь саму файловую систему или операционную систему.
Оценить скорость - это нужно учитывать в любом случае. Вопрос же про скорость был, да? Так вот с точки зрения файловой системы - скорость одинаковая.
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
24.02.2014, 18:48 #22
Цитата Сообщение от DrOffset Посмотреть сообщение
Оценить скорость - это нужно учитывать в любом случае. Вопрос же про скорость был, да? Так вот с точки зрения файловой системе скорость одинаковая.
С точки зрения файловой системы не скорость одинаковая, а нет самого признака, а текстовым, или бинарным бывает формат файла.
0
DrOffset
7517 / 4513 / 1025
Регистрация: 30.01.2014
Сообщений: 7,362
24.02.2014, 18:59 #23
Цитата Сообщение от taras atavin Посмотреть сообщение
С точки зрения файловой системы не скорость одинаковая, а нет самого признака.
Я об этом и писал, нет?
Вот.

Добавлено через 9 минут
Цитата Сообщение от taras atavin Посмотреть сообщение
а текстовым, или бинарным бывает формат файла.
Естественно, только понятие файл тут уже вторично. Об этом и был мой пост по ссылке. Но вопрос в теме звучал именно как текстовый или бинарный - файл. Когда правильно было бы текстовый или бинарный формат, т.к. у файла без знания формата не может быть такой характеристики как текстовый или бинарный, ты сам только что это сказал. Об этом и я все время говорил. И пресловутая замена \n на \n\r - это тоже часть формата, просто немного более низкого уровня, принятого в данной системе.
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
24.02.2014, 19:27 #24
Цитата Сообщение от DrOffset Посмотреть сообщение
у файла без знания формата не может быть такой характеристики как текстовый или бинарный, ты сам только что это сказал.
Это с точки зрения файловой системы, но ведь предполагается, что этот признак есть, значит речь не о ней, а программе, с точки зрения которой любой файл всегда какого либо формата.
0
DrOffset
7517 / 4513 / 1025
Регистрация: 30.01.2014
Сообщений: 7,362
24.02.2014, 19:41 #25
Цитата Сообщение от taras atavin Посмотреть сообщение
а программе, с точки зрения которой любой файл всегда какого либо формата.
Конечно. Это никак не противоречит ничему из того, что здесь было написано.
Тут скорее играет роль каким образом был поставлен изначальный вопрос, и в рамках каких категорий мы должны оперировать. Т.к. это не было уточнено, то вот мы и обратились к самым общим категориям, которые были.
Для сравнения, если взять файл в UNIX, который связан с последовательным портом, то чтение/запись туда всегда будут последовательны в силу его природы.
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
25.02.2014, 12:26 #26
Цитата Сообщение от DrOffset Посмотреть сообщение
Для сравнения, если взять файл в UNIX, который связан с последовательным портом, то чтение/запись туда всегда будут последовательны в силу его природы.
Ну да, конечно. Если работаешь с файлом последовательно, то уж ни как не произвольно. А если открыть по-другому? В контексте выбора даже категории формата потоки - не препятствие.

Добавлено через 34 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Еще раз, пройди по ссылке и узри, что бинарных форматов - тысячи.
Думаешь, я не в курсе?
Цитата Сообщение от DrOffset Посмотреть сообщение
А сохранение памяти как она есть на диск - это только маленький частный случай, про подводные камни которого все знают
Значит не все, раз объяснять приходится.

Добавлено через 12 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
И пресловутая замена \n на \n\r - это тоже часть формата, просто немного более низкого уровня, принятого в данной системе.
Только процессору плевать на то, как ты представишь перевод строки, это вкусы приложений: одно выполняет обнуление абсциссы и приращение ординаты под одним кейсом на \n, для другого это две раздельные реакции на два разных управляющих символа. Соответственно для них файл перекодируется перед отправкой другому юзверю. К чтению файла с диска это не относится. Файл же формата, например, .bmp отправляют, как есть, без переворота слов на любую платформу, но прочитанные из него числовые данные должны обрабатываться АЛУ процессора, которое может работать со словами задом на перёд. И тогда уже придётся переворачивать слова при каждом чтении/записи. Файл при этом остаётся .bmp, порядок байт на диске остаётся прежним, но в памяти он должен быть всегда противоположным. К задаче копирования самого файла с раскладкой копий по десяти каталогам это не относится, в этом случае файл читается и пишется, как сырой. Но если его читает приложение, то оно не должно искажать, например, ширину растра.
Цитата Сообщение от DrOffset Посмотреть сообщение
Наконец-то ты понял
, что именно тебе не понятно.
0
DrOffset
7517 / 4513 / 1025
Регистрация: 30.01.2014
Сообщений: 7,362
25.02.2014, 14:32 #27
Цитата Сообщение от taras atavin Посмотреть сообщение
Значит не все, раз объяснять приходится.
Я не знаю зачем ты мне это объясняешь Я вроде не давал повода сомневаться.
Цитата Сообщение от taras atavin Посмотреть сообщение
Кликните здесь для просмотра всего текста
Только процессору плевать на то, как ты представишь перевод строки, это вкусы приложений: одно выполняет обнуление абсциссы и приращение ординаты под одним кейсом на \n, для другого это две раздельные реакции на два разных управляющих символа. Соответственно для них файл перекодируется перед отправкой другому юзверю. К чтению файла с диска это не относится. Файл же формата, например, .bmp отправляют, как есть, без переворота слов на любую платформу, но прочитанные из него числовые данные должны обрабатываться АЛУ процессора, которое может работать со словами задом на перёд. И тогда уже придётся переворачивать слова при каждом чтении/записи. Файл при этом остаётся .bmp, порядок байт на диске остаётся прежним, но в памяти он должен быть всегда противоположным. К задаче копирования самого файла с раскладкой копий по десяти каталогам это не относится, в этом случае файл читается и пишется, как сырой. Но если его читает приложение, то оно не должно искажать, например, ширину растра.
И? Сериализацию как раз и придумали, чтобы уйти от этих проблем. Что ты заладил с этим процессором? Давай я тебе прямо скажу - я все это знаю, причем не по-наслышке, т.к у меня только сейчас проекты работают на 5ти разных аппаратных платформах (не говоря уже об ОС, которых сильно больше).
Давай я напомню твои слова:
Цитата Сообщение от taras atavin Посмотреть сообщение
Кликните здесь для просмотра всего текста
Текстовый файл медленнее по другой причине. Как задаётся место в текстовом файле при произвольном доступе? Номерами символа и строки. Но строки имеют разную длину и чтоб найти, где нужная строка находится, надо последовательно прочитать и проанализировать файл от начала. Положение в бинарнике задаётся номером байта, все байты одинаковы, это позволяет вычислить, где конкретно нужный байт находится и сразу перейти к этому месту. С другой стороны, текстовый файл - байтовый. А бинарный? Бинарный может состоять из чего угодно и иметь чёрт знает какое выравнивание, иметь какой угодно порядок байт в словах, двойных словах, четверных словах..., что придётся учитывать при последовательном чтении. Возможно, придётся менять порядок байтов, менять выравнивание, или читать каждое данное отдельно. Все эти дополнительные операции замедляют чтение, но нужны не всегда. При последовательном же чтении текстового файла можно читать блок, что даёт максимальную скорость доступа. Возможно бинарник получится читать также, а может и нет.
На что я только уточнил, что все вышеописанное относится в первую очередь к формату, а не к файлу. С чем ты потом благополучно согласился:
Цитата Сообщение от taras atavin Посмотреть сообщение
а текстовым, или бинарным бывает формат файла.
Ну и в чем смысл твоих дальнейших возражений?

Цитата Сообщение от taras atavin Посмотреть сообщение
Ну да, конечно. Если работаешь с файлом последовательно, то уж ни как не произвольно. А если открыть по-другому? В контексте выбора даже категории формата потоки - не препятствие.
Каким образом, простите? Я этой фразой намекал, что в определенных терминологических рамках понятие файл несколько более широкое, чем область на диске, и у некоторых типов таких файлов о произвольном доступе можно забыть.
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
25.02.2014, 14:50 #28
Цитата Сообщение от DrOffset Посмотреть сообщение
Давай я тебе прямо скажу - я все это знаю, причем не по-наслышке, т.к у меня только сейчас проекты работают на 5ти разных аппаратных платформах
Можно написать ещё больше проектов для 15-ти платформ и только потом догадаться, что возня с заменой \n на \r\n сразу при загрузке текстовика - лишь частный случай поддержки одновременно \n и \n\r в одном приложении, а не обязательная операция на винде и сравнить это со своими проектами, преобразующими при каждой загрузке бинарные данные, а можно о том же самом догадаться на втором проекте, не вылезая за границу одной платформы. Я вот сейчас как раз делаю одновременную поддержку \n, \r\n и \n\r в одном приложении и даже в перемешку в одном файле и обошёлся без замены. И хоть я и прикрутил сразу к загрузке приведение utf8 к многобайтной кодировке, но ведь можно было юзать utf8 и во внутреннем представлении, так что это проблема не формата. Я вообще толкую не о проблемах многоплатформенных бинарников, а об отличии текстовых форматов в контексте перекодирования от бинарных, о том, что в случае текстового формата можно в не перекодировать при чтении на любой платформе и при любых кодировке и фактическом формате и что это не совпадает с бинарником.
0
DrOffset
7517 / 4513 / 1025
Регистрация: 30.01.2014
Сообщений: 7,362
25.02.2014, 15:04 #29
Цитата Сообщение от taras atavin Посмотреть сообщение
лишь частный случай поддержки одновременно \n и \n\r в одном приложении, а не обязательная операция на винде
Где я написал-то такое?
Я тебе ссылку на дал на справку по fopen, где буржуйским по белому написано, что открытие файла в текстовом режиме может повлечь за собой определенные трансформации последовательности, частным случаем которых является замена \n и \n\r, которую делает некоторое виндовое файловое API.

А все остальное, что ты написал, вообще никак не противоречит ни одному из моих утверждений
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
25.02.2014, 15:08 #30
Цитата Сообщение от DrOffset Посмотреть сообщение
оследовательности, частным случаем которых является замена \n и \n\r, которую делает некоторое виндовое файловое API.
То то на дебаге просто \n после загрузки текстового файла.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2014, 15:08
Привет! Вот еще темы с ответами:

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

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

Что быстрее списки или вектор ? - C++
Всем привет. Делаю приложение и очень важна скорость обработки данных, а нужно хранить динамические массивы. В каком формате будет...

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


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

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