[Jde-dev] Problemas guardando y recuperando bytes en BLOB (mysql)

David Lobato dav.lobato en gmail.com
Lun Ene 25 15:30:13 CET 2010


Respondía a esta pregunta en otro correo. Adjunto la respuesta, que creo se
aplica a este caso también.

Así, sin probar nada, yo diria que hacer un memmove del std::vector
directamente es peligroso, ya que una vez serializado el objeto, la
representación ya no es portable, desde luego no entre máquinas y quizá
tampoco entre versiones de la libstdc++.

Yo cogería los datos 'a pelo', los serializaría y para recuperarlos crearía
un vector nuevo inizializandolo con los datos leidos desde fichero.

Para serializar si tienes:

std::vector<int> v;

Puedes acceder a los datos así:

&v[0]

Según la stl se almacenan de manera contigua, por lo que con dicha operación
obtienes un 'int*'.
Usando la operación size del vector puedes obtener la longitud del vector y
usarlo en un write() o en un memmove()

Para 'desserializar':

Primero lees el 'int*' e inicializas el vector así:

int *arrayInt;
std::vector<int> v (arrayInt, arrayInt + nElements );

Por int pon el tipo de datos que quieras, teniendo en cuenta que para
serializarlo/desserializarlo necesitaras algún mecanismo (write/read).

Espero que sea de ayuda.

David.

2010/1/18 Roberto Calvo <rocapal en libresoft.es>

>
> Buenas,
>
> Me está dando algunos problemas al meter un chorro de bytes en un BLOB
> de mysql. Os comento el código y el problema a ver si veis donde puede
> estar.
>
> La chica está en [1]. En el método "RecordingLog::saveRecordingEvent" se
> guarda el chorro de bytes en el BLOB. Como en mysql todo es un string,
> lo que hago es meter cada BYTE, en un BYTE del String, con memcpy.
>
> Luego lo recupero con el método "RecordingLog::getEventsOfRecording",
> exactamente en esta línea:
>
> event->image = static_cast<jderobot::ByteSeq> (row["image_file"]);
>
> Pero es justo donde falla porque parece ser que no sabe hacer el cast.
>
> No sé que se me está pasando ...
>
> un saludete!!
>
> [1]
>
> http://svn.jderobot.org/jderobot/trunk/src/components/recordingserver/libRecordingLog/RecordingLog.cpp
>
>
> --
> Roberto Calvo Palomino          | Libre Software Engineering Lab (GSyC)
> Tel: (+34) 91 488 85 23         | Universidad Rey Juan Carlos
> rocapal en libresoft.es            | Edif. Departamental II - Despacho 116
> http://libresoft.es/            | c/Tulipán s/n 28933 Móstoles (Madrid)
>
> GPG-KEY: http://gsyc.es/~rocapal/rocapal.gpg
>
> _______________________________________________
> Jde-developers mailing list
> Jde-developers en gsyc.es
> http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20100125/bf8ff568/attachment.htm 


More information about the Jde-developers mailing list