|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
Результаты опроса: Бинарные файлы (объекты сериализации) устарели?
|
1) Только текст
|
|
2 |
18.18% |
2) Только бинарка
|
|
0 |
0% |
42 (пояснить в посте)
|
|
9 |
81.82% |
30.06.2012, 02:50
|
#16
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Бинарные файлы
надуманные проблемы совместимости обойти просто - достаточно их игнорировать
little-endian почти везде
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
30.06.2012, 02:55
|
#17
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Бинарные файлы
Сообщение от Mr_F_
а где вообще конкретно такие проблемы с совместимостью встречались?
|
Что касается структур: http://xydan.livejournal.com/3344.html
На счёт переменных, честно говоря на практике сталкивался только при парсинге одного формата данных (нет гарантии, что числа выворачивались там с каким-то умыслом). Поэтому, не могу 100% гарантировать, а лишь предполагаю и опасаюсь (вспоминая сокеты и htonl/ntohl), что эффект имеет место быть.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
30.06.2012, 02:58
|
#18
|
|
Ответ: Бинарные файлы
Сообщение от impersonalis
вот специально для таких хитрых я и написал длинное вступление. Спасибо, конечно, за философское уточнение, ещё можно рассказать, что все данные это 0 и 1, а потом спустится ещё ниже - к непрерывным аналоговым сигналам... по теме же - ни слова
|
хм ? тебя интересует теоретическая сторона ? уже всё сказано
если же интересует практическая сторона но хочешь услышать "технически подкованный ответ который хоть в квн вставляй", так вот, количество букв в алфавите бинарных данных - 255, в ASCII - 127 скажем, те запись в текстовом виде всегда будет требовать больше байт чем в бинарном, а возможность "читать файл в блокноте" довольно спорна если это данные от программы для программ
|
|
|
Сообщение было полезно следующим пользователям:
|
|
30.06.2012, 03:12
|
#19
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Бинарные файлы
Сообщение от jimon
хм ? тебя интересует теоретическая сторона ? уже всё сказано
если же интересует практическая сторона но хочешь услышать "технически подкованный ответ который хоть в квн вставляй", так вот, количество букв в алфавите бинарных данных - 255, в ASCII - 127 скажем, те запись в текстовом виде всегда будет требовать больше байт чем в бинарном, а возможность "читать файл в блокноте" довольно спорна если это данные от программы для программ
|
Вероятно, пример с блокнотом всё испортил - каждый 2-ой отписавшийся почему-то рассматривает довод о возможности правки данных в текстовом процессоре.
Меня же более всего волнуют [потенциальные] проблемы переносимости.
Далее: в бинарном алфавите (раз уж мы обратились к теории передачи информации) - 256 символов. 7-битная аськи, канеш справедливо, но подразумевалась более привычная 8-битная, расширенная региональной таблицей. 256=256.
В бинарном виде записывается весь контейнер (напоминаю - речь о числах), а не только значащие биты, т.о. текстовое представление будет эффективней бинарного для всех случаев (см. первый пост):
sizeof(type)>floor(logX(number))+1, где Х - принятая для отображения с\с
для случая int VS 10-base числа от 0 до 999, т.к.
4>floor(2.9...)+1
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
30.06.2012, 03:26
|
#20
|
|
Ответ: Бинарные файлы
impersonalis
так если у тебя число от 0 до 999 то зачем тебе писать его в 4 байта ? хватит 2 байт (short : от 0 до 65535), 2 байта меньше 3 байт необходимых для записи 999
|
|
|
30.06.2012, 04:07
|
#21
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: Бинарные файлы
Сообщение от Mr_F_
а где вообще конкретно такие проблемы с совместимостью встречались?
|
Уже не актуально, но..
Borland Delphi 7
Скомпилил на 98 винде, перенёс на 2K,XP - получи кракозябры
Скомпилил на 2K,XP, перенёс на 98 - текст не отображается в принципе
Blitz3D тоже показал, что всё с русским не так уж и хорошо. Народ патчил ОС, патчил финальную exe, выносил текст из сорсов (ну это имхо всегда надо делать) и даже полностью заменял блицевский текст на свою реализацию. Таки решили, да.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
30.06.2012, 12:56
|
#22
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Бинарные файлы
Всем отписавшимся - большое спасибо: помогли выработать более объективный взгляд на ситуацию!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
30.06.2012, 13:42
|
#23
|
Элита
Регистрация: 16.01.2008
Сообщений: 1,800
Написано 958 полезных сообщений (для 3,833 пользователей)
|
Ответ: Бинарные файлы
Для шлифовки баланса геймплея - само собой только текст, сейвы в бинарке.
Но так как 95% файлов в тексте, то ответил только текст....возможно в будующем полностью на текст перейду, так удобней.
|
(Offline)
|
|
30.06.2012, 22:58
|
#24
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Бинарные файлы
Имею для C# свою бинарную сохранялку со структурой типа бинарного JSON и возможностью кодировать кастомные классы (делал для сокращения размера передаваемых данных по сети). Но когда надо использую XML/JSON/TEXT
|
(Offline)
|
|
01.07.2012, 13:16
|
#25
|
Дэвелопер
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений (для 1,460 пользователей)
|
Ответ: Бинарные файлы
Сообщение от impersonalis
Получается, что бинарные файлы - это хак. Его переносимость весьма условна.
В то же время, используя текстовый формат
Просьба сильно не пинать, если где-то заблуждаюсь
|
ну вот как тебя после этого не сильно грызть?
если у бинарного формата четко определен именно... формат, то никаких проблем с его чтением не существует.
есть функции преобразования big endian в little endian и наоборот.
просто сохранять кусок памяти конечно не годится.
но плотно упакованные структуры (без паддинга) лишнюю память не расходуют.
размышления про число 999 уже обсудил jimon.
кстати, "число", а по сути у тебя будет строка, нужно его сконвертировать с число.
так что такой подход не наш метод.
|
(Offline)
|
|
01.07.2012, 14:18
|
#26
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Бинарные файлы
Сообщение от ffinder
есть функции преобразования big endian в little endian и наоборот.
просто сохранять кусок памяти конечно не годится.
но плотно упакованные структуры (без паддинга) лишнюю память не расходуют.
|
об этом речь и шла - всё остальное, домыслы, вызванные, вероятно, моей некачественной формулировкой проблемы.
И главное из этого резюме: как реализовать (например, на цпп) грамотное сохранение (например double) в бинарном формате, в том числе - как реализовать код таким образом, чтобы он сам "понимал" необходимо ли использовать преобразование считанного.
Сообщение от ffinder
но плотно упакованные структуры (без паддинга) лишнюю память не расходуют.
|
Об этом тоже упоминалось в моих постах.
Тут даже важнее (в рамках проблемы) следующее: представление на разных компиляторах (и настройках) различаются, и потому если не убирать выравнивания то тупо переслать кусок памяти между программами не удастся.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
01.07.2012, 14:45
|
#27
|
|
Ответ: Бинарные файлы
Сообщение от impersonalis
представление на разных компиляторах (и настройках) различаются, и потому если не убирать выравнивания то тупо переслать кусок памяти между программами не удастся.
|
у каждого компилятора есть свой ABI (Application Binary Interface), иногда он задаётся самим языком, а иногда не задаётся так вот в C и C++ он не определяется стандартами, отсюда твои проблемы ?
ps. если да, то советую глянуть как у нас устроен вызов функций - везде юзается какое нибудь заранее обговоренное соглашение о вызове ( stdcall и прочие : http://en.wikipedia.org/wiki/X86_calling_conventions ), собственно если вызывающий код (например в другой библиотеке) не знает о соглашении то ничего не получится, вот так же делается и с структурами - надо кидать структуры между программами с разным ABI напрямую ? обговаривай соглашение и всё, зачастую выравнивание на 4 обговорить и хватит, самое сложное - это указатель на метод, он везде разный размер имеет (от 8 до 20 байт)
|
|
|
Сообщение было полезно следующим пользователям:
|
|
01.07.2012, 15:04
|
#28
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Бинарные файлы
Сообщение от jimon
у каждого компилятора есть свой ABI (Application Binary Interface), иногда он задаётся самим языком, а иногда не задаётся так вот в C и C++ он не определяется стандартами, отсюда твои проблемы ?
ps. если да, то советую глянуть как у нас устроен вызов функций - везде юзается какое нибудь заранее обговоренное соглашение о вызове ( stdcall и прочие : http://en.wikipedia.org/wiki/X86_calling_conventions ), собственно если вызывающий код (например в другой библиотеке) не знает о соглашении то ничего не получится, вот так же делается и с структурами - надо кидать структуры между программами с разным ABI напрямую ? обговаривай соглашение и всё, зачастую выравнивание на 4 обговорить и хватит, самое сложное - это указатель на метод, он везде разный размер имеет (от 8 до 20 байт)
|
УРА! именно это я и хотел услышать! В следующий раз буду задавать вопрос менее обтекаемо. Собственно, я это уже выжал из треда (хотя если б не тупил и задал вопрос нормально - то получил ответ сразу же ).
И именно поэтому я рассуждал о костыле в виде текстового представления.
p.s.: да проблемы с соглашением вызова как-то были - тема была изучена в необходимом объёме
Теперь просветите: насколько непопулярны системы с big-endian? Стоит ли опасаться непереносимости сохранённых чисел?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
01.07.2012, 15:29
|
#29
|
|
Ответ: Бинарные файлы
Сообщение от impersonalis
УРА! именно это я и хотел услышать! В следующий раз буду задавать вопрос менее обтекаемо. Собственно, я это уже выжал из треда (хотя если б не тупил и задал вопрос нормально - то получил ответ сразу же ).
И именно поэтому я рассуждал о костыле в виде текстового представления.
p.s.: да проблемы с соглашением вызова как-то были - тема была изучена в необходимом объёме
Теперь просветите: насколько непопулярны системы с big-endian? Стоит ли опасаться непереносимости сохранённых чисел?
|
если тебе не надо писать под PowerPC, SPARC и MIPS, то забей
|
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:34.
|