缓冲区的默认大小通常为 8192 字节,但这取决于实现。如何从
std::ofstream
对象中获取当前缓冲区大小的实际值?
根据评论,getting尺寸对你来说并不是很有用。你真正想要做的是set大小。幸运的是,这实际上相当容易(需要注意的是,至少在理论上,它可能会失败)。
流有一个
rdbuf()
成员来检索(指向)其关联的 streambuf
对象,并且 streambuf
有一个 pubsetbuf
告诉它使用特定的内存块作为其缓冲区。
// mock of the object we want to write all or nothing
struct myObject {
char data[256];
friend std::ostream &operator<<(std::ostream &is, myObject &m) {
return os.write(m.data, sizeof(m.data));
}
};
// number of objects to buffer
const std::size_t N = 20;
int main() {
// storage space for the buffer:
static char buffer[N * sizeof(myObject)+1];
std::ofstream output("somefile.txt");
// tell the stream to use our buffer:
output.rdbuf()->pubsetbuf(buffer, sizeof(buffer));
myObject m("some data to be written");
output << m;
}
你真的想在对流进行任何读取或写入之前设置缓冲区(否则,它必须在设置新缓冲区之前刷新现有缓冲区中的所有内容,这可能会导致写入部分对象)。