我有一个将二进制数据写入文件的对象。 有时需要查找到开始并重写一些数据,以更新实例的一个头。 我现在需要避免文件I/O,所以我正在寻找一个相当于“虚拟”文件流的东西,我可以四处寻找。
现在我使用的是一个向量,但是我从一个文件转换过来,以尽可能地提高性能。 我在尝试用向量模仿fseek
时也遇到了逻辑问题。
在C++中有没有更好的对象可以使用? 我的用例是
MyVirtualStream vs;
vs.Write(somebytes);
vs.Write(somebytes);
vs.Seek(0);
vs.Read(&somestruct);
somestruct.data = 555;
vs.Write(struct);
vs.Seek(0 + sizeof(somestruct));
您可以使用std::stringstream
:
#include <sstream>
struct Header
{
int flag1;
char flag2;
};
// Also uou can provide an overload for `std::ostream::operator<<` like
//std::ostream& operator<<(std::ostream&, const Header&);
//std::ostream& operator<<(std::ostream&, const Header&);
int main(int argc, char *argv[])
{
std::stringstream ss;
Header h {0x30303030, 0x31};
Header h2 {0x32323232, 0x33};
std::string str = "Hello, world";
ss << str;
ss.seekp(0); // move write position. Read and write position is independent for stringstream unlike fstream
ss.write("Buy ", 5);
std::cout << ss.str() << std::endl;
ss.write(reinterpret_cast<char*>(&h), sizeof(Header));
ss.seekg(5); // move read position
ss.read(reinterpret_cast<char*>(&h2), sizeof(Header));
return 0;
}
你在找一个字符串流。
它是一个流,由一个字符串(而不是文件或其他东西)支持。