{"id":16,"date":"2004-10-24T13:18:27","date_gmt":"2004-10-24T20:18:27","guid":{"rendered":"http:\/\/www.gubatron.com\/blog\/?p=16"},"modified":"2004-10-24T13:18:27","modified_gmt":"2004-10-24T20:18:27","slug":"c-serializando-una-lista-de-objetos-en-un-stream","status":"publish","type":"post","link":"https:\/\/www.gubatron.com\/blog\/c-serializando-una-lista-de-objetos-en-un-stream\/","title":{"rendered":"C++ Serializando una Lista de Objetos en un Stream"},"content":{"rendered":"\n<p>En la nueva implementacion de Filenger 2, fue necesario implementar serializacion de una lista. Para guardar todos los mensajes en un archivo.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.wedoit4you.com\/elinks\/show_image.php?Image_pk_id=820&amp;thumb=1&amp;img_height=400\" alt=\"\" \/><\/p>\n<p>La idea es hacer algo asi:<br \/>\n<code><br \/>\nQValueList&lt;Message&gt; listaDeMensajes;<br \/>\n...<br \/>\nstream &lt;&lt; listaDeMensajes; \/\/Escribe en el stream cada mensajes.<br \/>\n<\/code><\/p>\n<p>Pero las cosas no son tan sencillas, eso da un error, asi que tienes que definir el operador &lt;&lt; en la clase Message.<\/p>\n<p>Quise definir la escritura de una lista de mensajes y la lectura de la lista, para hacer<\/p>\n<p><code><br \/>\nstream &gt;&gt; listaDeMensajes;<br \/>\n<\/code><\/p>\n<p>(COMENTARIO PARA CODIGO EN FILENGER [Documentando fixes]<br \/>\nA la final, no me resulta tan bien eso de leer toda la lista de mensajes pq que si tienes unos 100mb de mensajes enviados, no es la idea cargarlos todos en memoria, para agregar un elemento, y volver a guardar, asi que probablemente me desaga del operador de escritura, y cuando vaya a guardar  un mensaje, lo serializo campo por campo, haciendo Append &#8211;yo me entiendo-)<\/p>\n<p><code><br \/>\nQDataStream &amp;operator&lt;&lt;(QDataStream &amp;out, const QValueList&lt;Message&gt; &amp;msgs)<br \/>\n{<br \/>\n    QValueList&lt;Message&gt;::const_iterator it = msgs.begin();<br \/>\n    out.setVersion(5);<br \/>\n    while (it != msgs.end()) {<br \/>\n\tMessage m = *it;<br \/>\n\tout &lt;&lt; m._from &lt;&lt; m._to &lt;&lt; m._cc &lt;&lt; m._bcc &lt;&lt; m._title &lt;&lt; m._message &lt;&lt; (signed char) m._useHtml;<br \/>\n\t++it;<br \/>\n    }<br \/>\n    \/\/In here we go through each element of the list and serialize it.<br \/>\n    return out;<br \/>\n}<\/code><\/p>\n<p><code><br \/>\nQDataStream &amp;operator&gt;&gt;(QDataStream &amp;in, QValueList&lt;&lt;Message&gt; &amp;msgs)<br \/>\n{<br \/>\n   msgs.clear();<br \/>\n    while (!in.atEnd()) {<br \/>\n\tMessage m;<br \/>\n\tin &gt;&gt; m._from &gt;&gt; m._to &gt;&gt; m._cc &gt;&gt; m._bcc &gt;&gt; m._title &gt;&gt; m._message &gt;&gt; (signed char)  m._useHtml;<br \/>\n\tmsgs.push_back(m);<br \/>\n    }<br \/>\n    <\/code><code><br \/>\n    return in;<br \/>\n}<br \/>\n<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En la nueva implementacion de Filenger 2, fue necesario implementar serializacion de una lista. Para guardar todos los mensajes en un archivo. La idea es hacer algo asi: QValueList&lt;Message&gt; listaDeMensajes; &#8230; stream &lt;&lt; listaDeMensajes; \/\/Escribe en el stream cada mensajes. Pero las cosas no son tan sencillas, eso da un error, asi que tienes que [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[33],"tags":[],"class_list":["post-16","post","type-post","status-publish","format-standard","hentry","category-gubatron"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5Unzf-g","jetpack-related-posts":[{"id":14,"url":"https:\/\/www.gubatron.com\/blog\/filenger-2-ya-funciona\/","url_meta":{"origin":16,"position":0},"title":"Filenger 2, ya funciona.","author":"gubatron","date":"October 23, 2004","format":false,"excerpt":"Viva Qt y C++ (que gallo) Creo que estoy desarrollando m\u00e1s r\u00e1pido en Qt este port de Filenger de lo que me cost\u00f3 hacerlo en C#. Al parecer una vez que aprendes a programar algo de verdad en Java, a la final es como si tuvieras punteros, solo que no\u2026","rel":"","context":"In &quot;Gubatron&quot;","block_context":{"text":"Gubatron","link":"https:\/\/www.gubatron.com\/blog\/category\/gubatron\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":18,"url":"https:\/\/www.gubatron.com\/blog\/como-actuar-en-una-entrevista-de-empleo\/","url_meta":{"origin":16,"position":1},"title":"Como actuar en una entrevista de empleo","author":"gubatron","date":"October 30, 2004","format":false,"excerpt":"La gente del trabajo en White Plains, me di\u00f3 una gu\u00eda bien interesante de como actuar en una entrevista de trabajo. Ellos tienen la idea de que debes ser un vendedor, el cual no solo vende sus capacidades t\u00e9cnicas, y su intelecto, sino sus capacidades humanas, dandole a entender al\u2026","rel":"","context":"In &quot;Gubatron&quot;","block_context":{"text":"Gubatron","link":"https:\/\/www.gubatron.com\/blog\/category\/gubatron\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11,"url":"https:\/\/www.gubatron.com\/blog\/retomando-filenger2\/","url_meta":{"origin":16,"position":2},"title":"Retomando Filenger2","author":"gubatron","date":"October 20, 2004","format":false,"excerpt":"Tiempo sin escribir, quer\u00eda hacerlo desde el s\u00e1bado pero he estado full. wedoit4you.com ahora que tiene un numero decente de visitas, ha empezado a ocasionar problemas de performance y hemos estado entonando las b\u00fasquedas y las tablas. Los chicos del hosting estaban sugieriendo que sacaran el sitio del servidor, y\u2026","rel":"","context":"In &quot;Gubatron&quot;","block_context":{"text":"Gubatron","link":"https:\/\/www.gubatron.com\/blog\/category\/gubatron\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":520,"url":"https:\/\/www.gubatron.com\/blog\/recordando-algoritmos-quicksort\/","url_meta":{"origin":16,"position":3},"title":"Recordando algoritmos, Quicksort","author":"gubatron","date":"May 17, 2007","format":false,"excerpt":"Leyendo no se que en internet, lei mencionar algo sobre preguntas de entrevistas de trabajo, y mencionaron que siempre es bueno saber como funciona Quicksort. Por algun motivo, el algoritmo de ordenamiento que siempre recuerdo es Bubble sort, pero todos sabemos que no es el mejor. So decidi repasar y\u2026","rel":"","context":"In &quot;Code&quot;","block_context":{"text":"Code","link":"https:\/\/www.gubatron.com\/blog\/category\/code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":534,"url":"https:\/\/www.gubatron.com\/blog\/trabaja-como-desarrollador-de-software-en-new-york\/","url_meta":{"origin":16,"position":4},"title":"Trabaja como desarrollador de software en New York","author":"gubatron","date":"June 6, 2007","format":false,"excerpt":"Todas las semanas me llegan multiples correos de reclutadores ofertando excelentes posiciones en New York y zonas cercanas. En muchos de los casos me llaman por telefono, y me preguntan si conozco personas que pueden llenar esas posiciones, mi respuesta es \"No, but I know a lot of talent in\u2026","rel":"","context":"In &quot;Code&quot;","block_context":{"text":"Code","link":"https:\/\/www.gubatron.com\/blog\/category\/code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":179,"url":"https:\/\/www.gubatron.com\/blog\/consejos-para-nuevos-estudiantes-de-ingenieria\/","url_meta":{"origin":16,"position":5},"title":"Consejos para nuevos estudiantes de Ingenieria","author":"gubatron","date":"July 29, 2005","format":false,"excerpt":"Un primo muy querido acaba de entrar a la universidad para estudiar Ingenieria Inform\u00e1tica, no se imaginaran el orgullo que me ha provocado. Ma\u00f1ana es su primer dia de clases (En Bogot\u00e1, que rico) y supongo que hoy poco dormir\u00e1 de la emoci\u00f3n, ya que le cost\u00f3 mucho llegar a\u2026","rel":"","context":"In &quot;Gubatron&quot;","block_context":{"text":"Gubatron","link":"https:\/\/www.gubatron.com\/blog\/category\/gubatron\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/posts\/16","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/comments?post=16"}],"version-history":[{"count":0,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/posts\/16\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/media?parent=16"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/categories?post=16"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/tags?post=16"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}