Impulsion directe de la sérialisation de char tableau
Stimuler la sérialisation du doc affirmer que la façon de sérialiser/désérialiser des objets est à l'aide d'un binaire/texte d'archive avec un flux sur la structure sous-jacente. Cela fonctionne bien si je wan pas utiliser les données sérialisées comme un std::string, mais mon intention est de le convertir directement à un char* buffer. Comment puis-je obtenir sans la création d'une chaîne temporaire?
Résolu! Pour ceux qui voulaient un exemple:
char buffer[4096];
boost::iostreams::basic_array_sink<char> sr(buffer, buffer_size);
boost::iostreams::stream< boost::iostreams::basic_array_sink<char> > source(sr);
boost::archive::binary_oarchive oa(source);
oa << serializable_object;
- D'autre part, pourquoi voulez-vous renoncer à la libre gestion de la mémoire et des risques de fuite et de dépassement 🙂 ?
- Malheureusement, à cause de problèmes de performances 🙁
Vous devez vous connecter pour publier un commentaire.
IIUC, vous souhaitez écrire à un préaffectés tableau de taille fixe.
Vous pouvez utiliser un boost::iostreams::array_sink (enveloppé avec flux pour lui donner un std::ostream interface) pour que les.
Si vous ne connaissez pas la taille des données que vous envoyez à l'avance, c'est une méthode générique permettant de sérialiser dans un
std::string
:Pour désérialiser, utilisez
Cela fonctionne comme un charme, je l'utilise pour envoyer des données avec MPI.
Cela peut se faire très rapidement si vous maintenez la
serial_str
en mémoire, et il suffit d'appelerserial_str.clear()
avant de sérialiser en elle. Cela efface les données, mais ne permet pas de libérer la mémoire, donc pas de répartition va se passer lors de votre prochaine sérialisation de données de taille ne le nécessite pas.std::string serial_str
comme une variable membre, et re-créer tout le reste, à chaque fois que j'envoie quelque chose.