<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-1702873441071265539.post2632220399538197041..comments</id><updated>2011-12-28T10:17:42.740+04:00</updated><category term='не делай так'/><category term='прочее'/><category term='Vista'/><category term='ты можешь это сделать'/><category term='роботы/киберпанк'/><category term='Королевство Delphi'/><category term='работа'/><category term='Delphi'/><category term='случайные мысли'/><category term='начинающим'/><category term='блог'/><category term='Коты'/><category term='7'/><category term='журнал'/><category term='EurekaLog'/><category term='задачки'/><category term='Windows'/><category term='Tiburon'/><category term='обработка ошибок'/><category term='x64'/><category term='TasksEx'/><category term='Статья'/><title type='text'>Comments on Блог GunSmoker-а: Сериализация - потоки данных</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.gunsmoker.ru/feeds/2632220399538197041/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default'/><link rel='alternate' type='text/html' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html'/><author><name>Александр Алексеев</name><uri>https://profiles.google.com/113168002104297556003</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-aUMttZQBsuI/AAAAAAAAAAI/AAAAAAAAC3Y/QuZ7K9t_WzE/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1702873441071265539.post-17214101762868413</id><published>2011-12-28T10:17:42.740+04:00</published><updated>2011-12-28T10:17:42.740+04:00</updated><title type='text'>Ну, как бы плюсы и минусы я писал в сравнении с др...</title><content type='html'>Ну, как бы плюсы и минусы я писал в сравнении с другими методами работы с файлами. Такая логика.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/17214101762868413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/17214101762868413'/><link rel='alternate' type='text/html' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html?showComment=1325053062740#c17214101762868413' title=''/><author><name>Александр Алексеев</name><uri>http://www.blogger.com/profile/15611696588191431330</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13148942647851058340'/><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-aUMttZQBsuI/AAAAAAAAAAI/AAAAAAAAC3Y/QuZ7K9t_WzE/s512-c/photo.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html' ref='tag:blogger.com,1999:blog-1702873441071265539.post-2632220399538197041' source='http://www.blogger.com/feeds/1702873441071265539/posts/default/2632220399538197041' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-882382456'/></entry><entry><id>tag:blogger.com,1999:blog-1702873441071265539.post-3294939044552528380</id><published>2011-12-28T10:16:37.969+04:00</published><updated>2011-12-28T10:16:37.969+04:00</updated><title type='text'>&lt;i&gt;Попробуй открыть файл с нужным доступом. У тебя...</title><content type='html'>&lt;i&gt;Попробуй открыть файл с нужным доступом. У тебя не получится сделать это потокобезопасно, потому что FileMode - глобальная переменная&lt;/i&gt;&lt;br /&gt;Ааа, ты имеешь в виду, для Паскалевских файлов? Я просто ни разу это не юзал. Тогда не спорю, это в самом деле не потокобезопасно.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/3294939044552528380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/3294939044552528380'/><link rel='alternate' type='text/html' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html?showComment=1325052997969#c3294939044552528380' title=''/><author><name>Fr0sT</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html' ref='tag:blogger.com,1999:blog-1702873441071265539.post-2632220399538197041' source='http://www.blogger.com/feeds/1702873441071265539/posts/default/2632220399538197041' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1858289757'/></entry><entry><id>tag:blogger.com,1999:blog-1702873441071265539.post-4546336002258529794</id><published>2011-12-27T20:48:57.264+04:00</published><updated>2011-12-27T20:48:57.264+04:00</updated><title type='text'>&lt;i&gt; &amp;gt;&amp;gt;&amp;gt; А где они меняются?&lt;/i&gt;

Этот воп...</title><content type='html'>&lt;i&gt; &amp;gt;&amp;gt;&amp;gt; А где они меняются?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Этот вопрос суть раскрывает. На красный свет тоже можно переходить. Только это не делает это правильным.&lt;br /&gt;&lt;br /&gt;&lt;i&gt; &amp;gt;&amp;gt;&amp;gt; Хм, что-то не понял, при чем тут FileMode&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Ну как же. Попробуй открыть файл с нужным доступом. У тебя не получится сделать это потокобезопасно, потому что FileMode - глобальная переменная. &lt;br /&gt;&lt;br /&gt;А с потоками данных никакой проблемы нет. Поток данных, созданный во вторичном потоке, никак не связан (и не влияет) с потоком данных в главном потоке - если, конечно, ты сам их не свяжешь (например, натравив оба потока данных на один источник). Но это как бы уже ты сам себе злобный буратино, а сам по себе поток данных проблем не привносит. В отличие от FileMode.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/4546336002258529794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/4546336002258529794'/><link rel='alternate' type='text/html' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html?showComment=1325004537264#c4546336002258529794' title=''/><author><name>Александр Алексеев</name><uri>http://www.blogger.com/profile/15611696588191431330</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13148942647851058340'/><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-aUMttZQBsuI/AAAAAAAAAAI/AAAAAAAAC3Y/QuZ7K9t_WzE/s512-c/photo.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html' ref='tag:blogger.com,1999:blog-1702873441071265539.post-2632220399538197041' source='http://www.blogger.com/feeds/1702873441071265539/posts/default/2632220399538197041' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-882382456'/></entry><entry><id>tag:blogger.com,1999:blog-1702873441071265539.post-4833730592673798739</id><published>2011-12-27T18:23:30.309+04:00</published><updated>2011-12-27T18:23:30.309+04:00</updated><title type='text'>&lt;i&gt;Мне кажется, ты неявно за меня немножко домысли...</title><content type='html'>&lt;i&gt;Мне кажется, ты неявно за меня немножко домыслил то, что я не говорил. Обрати внимание, что речь идёт про отправку и приём данных.&lt;/i&gt;&lt;br /&gt;Возможно, да, а возможно, и нет. Да, приём и отправка данных - это как раз то, с чем я работаю. И мне как-то ни разу не хотелось юзать поток для хранения данных. Потому как для сетевого обмена, например, особенно если это - сплошной поток (какая ирония!), stream не подходит, а скорее нужна очередь. Да, функционала очереди можно добиться от стрима парой новых методов, но не суть. В принципе, я вообще не очень люблю, когда над указателями и блоками памяти навешивают свои типы. Взять, к примеру, TBytes, с которым плотно работает TEncoding. Понятно, что это слизано с .Нет, где другого средства нет. А вот в нативке, если у тебя уже есть буфер с данными, куда засунуть этот TBytes? Придется так или иначе копировать, а это затраты времени и памяти. Так же, к примеру, и с Format - иногда бывает, что нужно инжектить результат в имеющийся символьный буфер, ан фигу. Слава Небесам, что есть FormatBuf - а ведь его могло бы и не быть!&lt;br /&gt;&lt;i&gt;То, что генерик тип не меняется на одной конкретной платформе ещё не означает, что он не меняется вообще.&lt;/i&gt;&lt;br /&gt;А где они меняются? Ну, кроме 16-битной платформы (и то не уверен, а искать неохота).&lt;br /&gt;&lt;i&gt;В общем-то да, но тогда придётся объяснять где взять этот тип на Delphi 7.&lt;/i&gt;&lt;br /&gt;Ну что ж, кто хочет совместимости, тот должен быть готовым к куче дефайнов! Конечно, в качестве примера с этим можно и не заморачиваться, но вообще хорошо бы упомянуть, что (U)Int## как раз и предназначены для простого и наглядного объявления переменной фиксированного размера.&lt;br /&gt;&lt;i&gt;Сравни это с переменной FileMode. Речь про это.&lt;/i&gt;&lt;br /&gt;Хм, что-то не понял, при чем тут FileMode</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/4833730592673798739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/4833730592673798739'/><link rel='alternate' type='text/html' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html?showComment=1324995810309#c4833730592673798739' title=''/><author><name>Fr0sT</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html' ref='tag:blogger.com,1999:blog-1702873441071265539.post-2632220399538197041' source='http://www.blogger.com/feeds/1702873441071265539/posts/default/2632220399538197041' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1858289757'/></entry><entry><id>tag:blogger.com,1999:blog-1702873441071265539.post-2886958597930189840</id><published>2011-12-27T16:33:55.217+04:00</published><updated>2011-12-27T16:33:55.217+04:00</updated><title type='text'>&lt;i&gt; &amp;gt;&amp;gt;&amp;gt; 3 - соглашусь (хотя такое и может...</title><content type='html'>&lt;i&gt; &amp;gt;&amp;gt;&amp;gt; 3 - соглашусь (хотя такое и может понадобиться для ограничения типа), а вот 1, 2 - нет. Оперируя с буфером, буфер и передаёшь, необходимость мутить дополнительные объекты потоков - излишня и раздражает.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Мне кажется, ты неявно за меня немножко домыслил то, что я не говорил. Обрати внимание, что речь идёт про отправку и приём данных.&lt;br /&gt;&lt;br /&gt;Разумеется, могут быть случаи, когда в контексте задачи имеет смысл только буфер памяти - в этом случае 1 и 2 более чем уместны и даже, более того, п3 не пригоден. &lt;br /&gt;&lt;br /&gt;Я же говорю как раз о ситуациях, когда данные могут быть где угодно, но человек всё равно пишет Pointer - и всё тут. В результате вместо того, чтобы просто передать поток, вызывающему придётся данные загрузить самому. &lt;br /&gt;&lt;br /&gt;&lt;i&gt; &amp;gt;&amp;gt;&amp;gt; Integer и Cardinal не меняют своих размеров на х64, только указатели и Native(U)Int&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;То, что генерик тип не меняется на одной конкретной платформе ещё не означает, что он не меняется вообще.&lt;br /&gt;&lt;br /&gt;&lt;i&gt; &amp;gt;&amp;gt;&amp;gt; Но если уж нужна фиксация по размеру, то логичнее юзать UInt32.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;В общем-то да, но тогда придётся объяснять где взять этот тип на Delphi 7.&lt;br /&gt;&lt;br /&gt;&lt;i&gt; &amp;gt;&amp;gt;&amp;gt; C чего бы это?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Сравни это с переменной FileMode. Речь про это. Если угодно: &amp;quot;нет никаких &lt;b&gt;специальных&lt;/b&gt; проблем&amp;quot;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/2886958597930189840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/2886958597930189840'/><link rel='alternate' type='text/html' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html?showComment=1324989235217#c2886958597930189840' title=''/><author><name>Александр Алексеев</name><uri>http://www.blogger.com/profile/15611696588191431330</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13148942647851058340'/><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-aUMttZQBsuI/AAAAAAAAAAI/AAAAAAAAC3Y/QuZ7K9t_WzE/s512-c/photo.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html' ref='tag:blogger.com,1999:blog-1702873441071265539.post-2632220399538197041' source='http://www.blogger.com/feeds/1702873441071265539/posts/default/2632220399538197041' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-882382456'/></entry><entry><id>tag:blogger.com,1999:blog-1702873441071265539.post-5389607026802356905</id><published>2011-12-27T14:46:07.230+04:00</published><updated>2011-12-27T14:46:07.230+04:00</updated><title type='text'>&lt;i&gt;Если вы в своей процедуре принимаете или отправ...</title><content type='html'>&lt;i&gt;Если вы в своей процедуре принимаете или отправляете какие-то данные - используйте TStream. Не используйте для этого нетипизированные параметры, указатели или конкретные экземпляры TStream. Т.е. вместо:&lt;br /&gt;1 procedure A(AData: Pointer; ADataSize: Cardinal);&lt;br /&gt;2 procedure B(const AData; ADataSize: Cardinal);&lt;br /&gt;3 procedure C(AData: TFileStream);&lt;br /&gt;&lt;br /&gt;должно быть:&lt;br /&gt;1 procedure A(AData: TStream);&lt;br /&gt;2 procedure B(AData: TStream);&lt;br /&gt;3 procedure C(AData: TStream);&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;3 - соглашусь (хотя такое и может понадобиться для ограничения типа), а вот 1, 2 - нет. Оперируя с буфером, буфер и передаёшь, необходимость мутить дополнительные объекты потоков - излишня и раздражает. Поэтому точно так же, как есть LoadFrom/WriteToFile, надо делать перегруженные методы для непосредственной работы с блоком данных.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Обратите внимание, что в качестве счётчика длины используется LongInt, а не Integer - по причинам, указанным выше для типизированных файлов: String, Extended, Integer и Cardinal могут менять свои размеры в зависимости от окружения - поэтому мы используем другие типы, которые гарантировано всегда имеют один и тот же размер.&lt;/i&gt;&lt;br /&gt;Integer и Cardinal не меняют своих размеров на х64, только указатели и Native(U)Int. Но если уж нужна фиксация по размеру, то логичнее юзать UInt32.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Нет проблем с многопоточностью&lt;/i&gt;&lt;br /&gt;C чего бы это? Отсутствие проблем может быть только для handlestream, и то только потому, что ОС заботится о синхронизации доступа. А всё остальное, тот же memorystream, абсолютно так же подвержен проблемам, как и любой буфер в куче.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/5389607026802356905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/5389607026802356905'/><link rel='alternate' type='text/html' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html?showComment=1324982767230#c5389607026802356905' title=''/><author><name>Fr0sT</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html' ref='tag:blogger.com,1999:blog-1702873441071265539.post-2632220399538197041' source='http://www.blogger.com/feeds/1702873441071265539/posts/default/2632220399538197041' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-990479108'/></entry><entry><id>tag:blogger.com,1999:blog-1702873441071265539.post-2631181837819178048</id><published>2011-12-01T19:58:55.674+04:00</published><updated>2011-12-01T19:58:55.674+04:00</updated><title type='text'>Офигеть, на Delphi пишу с момента ее выхода, и по ...</title><content type='html'>Офигеть, на Delphi пишу с момента ее выхода, и по прочтении статьи понял, что Delphi я не знаю...</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/2631181837819178048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/2631181837819178048'/><link rel='alternate' type='text/html' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html?showComment=1322755135674#c2631181837819178048' title=''/><author><name>AlekVolsk</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html' ref='tag:blogger.com,1999:blog-1702873441071265539.post-2632220399538197041' source='http://www.blogger.com/feeds/1702873441071265539/posts/default/2632220399538197041' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-500293731'/></entry><entry><id>tag:blogger.com,1999:blog-1702873441071265539.post-1007509119539596221</id><published>2011-11-14T12:33:51.505+04:00</published><updated>2011-11-14T12:33:51.505+04:00</updated><title type='text'>День добрый.
Интересная статья, да и сама тема сер...</title><content type='html'>День добрый.&lt;br /&gt;Интересная статья, да и сама тема серии.&lt;br /&gt;Именно так и делаю. Для себя принял строгое правило: все данные которые выходят за границу программы или dll, обязательно дополнять версией! То есть сначала пишу версию, а потом все что нужно. В качестве версии замечательно подходит TGUID, и размер стандартный и неповторяемость почти 100%. Что еще хорошо, если какой либо интерфейс пишет данные, то он может подписаться своим GUIDом. При загрузке данных, сначала читаем GUID, если знаем такой, то читаем все остальное, не знаем, ругаемся на не поддерживаемый формат данных.&lt;br /&gt;Всем удачи!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/1007509119539596221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1702873441071265539/2632220399538197041/comments/default/1007509119539596221'/><link rel='alternate' type='text/html' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html?showComment=1321259631505#c1007509119539596221' title=''/><author><name>nik0lay</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.gunsmoker.ru/2011/11/blog-post_12.html' ref='tag:blogger.com,1999:blog-1702873441071265539.post-2632220399538197041' source='http://www.blogger.com/feeds/1702873441071265539/posts/default/2632220399538197041' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1122407217'/></entry></feed>
