使用 fstream 将未格式化的数据写入文件
Write unformatted data to file with fstream
我正在尝试在套接字之间传输文件。我使用通过 /dev/urandom 在 linux 上创建的 1MB 文件。使用此文件,我能够通过客户端成功传输数据,但是当我将数据写入文件时,输出不完整。我使用的命令是:
myFile << data;
我认为可能发生的情况是“<<”不接受未格式化的数据。是否有接受未格式化数据的“<<”的替代方法?
使用std::ofstream::write
(std::fstream
和std::ofstream
继承了std::basic_ostream
的write
功能)。
myFile.write(reinterpret_cast<const char*>(&data), sizeof(data));
对于原始二进制数据vector<uint8_t> data
你可以一次写出整个向量:
std::vector<uint8_t> data{};
//Fill data...
myFile.write(reinterpret_cast<const char*>(data.data()), data.size());
结构有点不同:
std::vector<Foo> data{};
//Fill data...
myFile.write(reinterpret_cast<const char*>(data.data()), data.size() * sizeof(Foo));
无论如何,您需要在写入前加上数据缓冲区中的元素数量,以便您知道当您想要取回它时它有多大:
const auto buffer_size = data.size();
myFile.write(reinterpret_cast<const char*>(&buffer_size), sizeof(buffer_size));
我正在尝试在套接字之间传输文件。我使用通过 /dev/urandom 在 linux 上创建的 1MB 文件。使用此文件,我能够通过客户端成功传输数据,但是当我将数据写入文件时,输出不完整。我使用的命令是:
myFile << data;
我认为可能发生的情况是“<<”不接受未格式化的数据。是否有接受未格式化数据的“<<”的替代方法?
使用std::ofstream::write
(std::fstream
和std::ofstream
继承了std::basic_ostream
的write
功能)。
myFile.write(reinterpret_cast<const char*>(&data), sizeof(data));
对于原始二进制数据vector<uint8_t> data
你可以一次写出整个向量:
std::vector<uint8_t> data{};
//Fill data...
myFile.write(reinterpret_cast<const char*>(data.data()), data.size());
结构有点不同:
std::vector<Foo> data{};
//Fill data...
myFile.write(reinterpret_cast<const char*>(data.data()), data.size() * sizeof(Foo));
无论如何,您需要在写入前加上数据缓冲区中的元素数量,以便您知道当您想要取回它时它有多大:
const auto buffer_size = data.size();
myFile.write(reinterpret_cast<const char*>(&buffer_size), sizeof(buffer_size));