Copiez-vous les données de fstream vers stringstream sans tampon?
Est-il de toute façon je peux transférer des données à partir d'un fstream
(un fichier) pour un stringstream
(un flux de données dans la mémoire)?
Actuellement, je suis en utilisant un tampon, mais cela nécessite le double de la mémoire, car vous avez besoin de copier les données dans une mémoire tampon, puis copiez le contenu du tampon à la stringstream, et jusqu'à la suppression de la mémoire tampon, les données sont copiées dans la mémoire.
std::fstream fWrite(fName,std::ios::binary | std::ios::in | std::ios::out);
fWrite.seekg(0,std::ios::end); //Seek to the end
int fLen = fWrite.tellg(); //Get length of file
fWrite.seekg(0,std::ios::beg); //Seek back to beginning
char* fileBuffer = new char[fLen];
fWrite.read(fileBuffer,fLen);
Write(fileBuffer,fLen); //This writes the buffer to the stringstream
delete fileBuffer;`
Personne ne sait comment je peux écrire un fichier entier à un stringstream sans l'aide d'un inbetween tampon?
source d'informationauteur Brad | 2010-10-31
Vous devez vous connecter pour publier un commentaire.
Dans la documentation de
ostream
il y a plusieurs surcharges pouropérateur<<
. L'un d'eux prend unstreambuf*
et lit tous les streambuffer du contenu.Voici un exemple d'utilisation (compilé et testé):
Le seul moyen à l'aide de la norme C++ de la bibliothèque est d'utiliser un
ostrstream
au lieu destringstream
.Vous pouvez construire une
ostrstream
objet avec votre propre char tampon, et il va prendre possession de la mémoire tampon, puis (donc plus de copie est nécessaire).Noter, cependant, que le
strstream
en-tête est obsolète (même si sa reste une partie de C++03, et le plus probable, il sera toujours disponible sur la plupart des implémentations de la bibliothèque standard), et vous aurez de gros ennuis si vous oubliez de zéro à la fin des données fournies à la ostrstream.Ceci s'applique également dans le flux des opérateurs, des e.g:ostrstreamobject << some_data << std::ends;
(std::ends
nullterminates les données).