簡體   English   中英

c++ 中的字節 stream

[英]Byte stream in c++

我有一個應用程序在一個線程(輸入線程)上接收任意長度的字節組,並且需要在另一個線程(處理線程)上以 1024 塊的形式處理這些字節。 所以我想我會使用一些可以在輸入線程上寫入並在處理線程上讀取的字節流類型。

我為此使用了std::stringstream ,它可以工作,但有 memory 泄漏。

宣言:

std::stringstream _bytestream{};
int _bytestreamSize{0};

在輸入線程上:

_byteStream.write((char*) inputData, inputLength);
_bytestreamSize += inputLength;

在處理線程上:

// ... inside some processing loop ...
while (_bytestreamSize >= 1024) {
  _byteStream.read((char*) dataToProcess, 1024);
  _bytestreamSize -= 1024;
}

這工作正常,但std::stringstream內的字符串只是不斷增長。 我嘗試使用std::stringbuf但遇到了同樣的問題。

我的問題:

  • std::stringstreamstd::stringbuf是一個很好的類型嗎?
  • 如果是,我該如何正確使用它? 如何釋放已讀取字節的 memory?
  • 如果沒有,是否存在更適合的標准類型或方法?

備注:可以假設處理線程可以足夠快地處理傳入的字節而不會遇到麻煩。

問題是std::stringstream永遠不會真正釋放它的 memory 直到你銷毀它。 這是std::stringstream的一個已知問題,因為您無法減少其內部緩沖區。

解決方法是在每次使用后都破壞字符串流,因此不要嘗試減小其大小,只需為每個輸入創建一個新的並通過管道發送它。 如果您需要在內部某處存儲讀取的數據,請使用第二個字符串流或類似內容,您也可以寫入 output 數據。

暫無
暫無

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

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