提问者:小点点

C++虚拟“文件”流


我有一个将二进制数据写入文件的对象。 有时需要查找到开始并重写一些数据,以更新实例的一个头。 我现在需要避免文件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));

共2个答案

匿名用户

您可以使用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;
}

匿名用户

你在找一个字符串流。

它是一个流,由一个字符串(而不是文件或其他东西)支持。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|虚拟|文件|流)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?