Maison >développement back-end >C++ >Comment puis-je écrire efficacement dans un tampon pré-alloué à l'aide de flux standard C ?
Définition du tampon interne pour les flux standard à l'aide de pubsetbuf
Problème :
Dans une tentative de écrire des données dans un tampon existant à l'aide d'un flux de chaînes, un programmeur a initialement utilisé la copie pour transférer le contenu du flux vers le tampon, dans le but d'éviter un excès de données copie. Par la suite, ils ont essayé streambuf::pubsetbuf() pour y parvenir, mais ont constaté qu'il ne modifiait pas le tampon sous l'implémentation de la bibliothèque standard Visual Studio 2008 C.
Réponse :
Après une enquête plus approfondie, il est devenu évident que la méthode pubsetbuf dans l'implémentation de la bibliothèque donnée était essentiellement une non-opération. Pour configurer un flux pour écrire dans un tampon spécifique, il est recommandé d'utiliser une classe std::streambuf personnalisée :
template <typename char_type> struct ostreambuf : public std::basic_streambuf<char_type std::char_traits>> { ostreambuf(char_type* buffer, std::streamsize bufferLength) { setp(buffer, buffer + bufferLength); } };</char_type></typename>
Ce tampon de flux personnalisé initialise ses composants internes pour référencer le tampon fourni. Pour l'utiliser :
ostreambuf<char> ostreamBuffer(buffer, size); std::ostream messageStream(&ostreamBuffer); messageStream <p>Cette approche permet d'écrire directement dans un tampon externe à l'aide de la bibliothèque IOStream et de std::ostream, évitant ainsi la copie inutile impliquée dans la méthode de copie initiale.</p></char>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!