簡體   English   中英

將內存緩沖區寫入std :: stringstream

[英]Writing a memory buffer to std::stringstream

我有一個代表內存中的緩沖區的類

class Buffer
{
public:
    Buffer(const char* buffer, size_t size)
        :m_buffer(buffer), m_size(size)
    {
    }

    const char* m_buffer;
    size_t m_size;
};

我需要在此類上重載operator<< ,以便可以像這樣將其寫入std::stringstream

char arr[] = "hello world";
Buffer buf(arr, 11);
std::stringstream ss;
ss << buf;

我該怎么做呢? 請注意,內存緩沖區之間可能有NULL字符。 另外,由於內存緩沖區可能很大,因此我想避免對此做任何額外的復制(除了復制到stringstream中)。

寫入流總是完成到輸出流。

如果您看到例如std::stringstream引用,您將看到它繼承自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類來寫入任何輸出流。

在重載函數中確切需要什么來寫入數據取決於數據。 可以是任何通用二進制數據,那么您應該使用std::ostream::write 否則,您可以僅使用例如std::string充當中介:

return os << std::string(m_buffer, m_size);

當然,您需要確保緩沖區不為空,或者為空指針。

operator<<重載中使用std::ostream::write ()將緩沖區寫入std::ostream

這將寫入所有內容,空字節,等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM