将内存缓冲区写入 std::stringstream
Writing a memory buffer to std::stringstream
我有一个 class 表示内存中的缓冲区
class Buffer
{
public:
Buffer(const char* buffer, size_t size)
:m_buffer(buffer), m_size(size)
{
}
const char* m_buffer;
size_t m_size;
};
我需要在此 class 上重载 operator<<
以便它可以像这样写入 std::stringstream
char arr[] = "hello world";
Buffer buf(arr, 11);
std::stringstream ss;
ss << buf;
我该怎么做?请注意,内存缓冲区之间可能有 NULL
个字符。此外,由于内存缓冲区可能很大,我想避免对此进行任何额外的复制(除了复制到字符串流中)。
写入流总是写入输出流。
如果你看到例如this std::stringstream
reference 你会看到它继承自 std::iostream
,后者继承自 std::ostream
(以及 std::istream
)。
这意味着您只需像这样重载它:
class Buffer
{
public:
...
friend std::ostream& operator<<(std::ostream& os, Buffer const& buf)
{
// Code to write the buffer to the stream...
}
};
这种重载当然意味着您可以使用 Buffer
class 写入 any 输出流。
重载函数究竟需要什么来写入数据取决于数据。它可以是任何通用二进制数据,那么您应该使用 std::ostream::write
。否则你可以只使用例如std::string
充当中间人:
return os << std::string(m_buffer, m_size);
你当然需要确保缓冲区不为空,或者空指针。
在 operator<<
重载中使用 std::ostream::write
() 将缓冲区写入 std::ostream
。
这将写入所有内容,空字节等
我有一个 class 表示内存中的缓冲区
class Buffer
{
public:
Buffer(const char* buffer, size_t size)
:m_buffer(buffer), m_size(size)
{
}
const char* m_buffer;
size_t m_size;
};
我需要在此 class 上重载 operator<<
以便它可以像这样写入 std::stringstream
char arr[] = "hello world";
Buffer buf(arr, 11);
std::stringstream ss;
ss << buf;
我该怎么做?请注意,内存缓冲区之间可能有 NULL
个字符。此外,由于内存缓冲区可能很大,我想避免对此进行任何额外的复制(除了复制到字符串流中)。
写入流总是写入输出流。
如果你看到例如this std::stringstream
reference 你会看到它继承自 std::iostream
,后者继承自 std::ostream
(以及 std::istream
)。
这意味着您只需像这样重载它:
class Buffer
{
public:
...
friend std::ostream& operator<<(std::ostream& os, Buffer const& buf)
{
// Code to write the buffer to the stream...
}
};
这种重载当然意味着您可以使用 Buffer
class 写入 any 输出流。
重载函数究竟需要什么来写入数据取决于数据。它可以是任何通用二进制数据,那么您应该使用 std::ostream::write
。否则你可以只使用例如std::string
充当中间人:
return os << std::string(m_buffer, m_size);
你当然需要确保缓冲区不为空,或者空指针。
在 operator<<
重载中使用 std::ostream::write
() 将缓冲区写入 std::ostream
。
这将写入所有内容,空字节等