簡體   English   中英

異步讀取時緩沖區會被覆蓋嗎?

[英]Will the buffer be overwritten when async read?

我想在 async_read_until 之后使用 boost::async_read。 async_read_until 可以在分隔符后寫入緩沖一些數據。 我可以在 async_read_until 之后使用相同的緩沖區安全地提升 async_read 並且不會丟失已經在緩沖區中的數據嗎?

這取決於。

有將保留信息的動態緩沖區(streambuf、dynamic_string_buffer 等)。

如果使用固定緩沖區序列,則可以使用緩沖區算術來保留現有緩沖區的一部分。

它可能有助於實現反面: [async_]read_until保證在滿足完成條件時完成。 但是,它可能已將更多內容讀入緩沖區。 這就是為什么consume(n)只消耗動態緩沖區的前綴。

事實上,當您使用相同的動態緩沖區發出另一個 read[_until] 時,如果現有緩沖區內容已經與完成條件匹配,那么底層AsyncReadStream上可能沒有另一個asrs.async_read_some實際上完成。

在一個極端的例子中,我最近開始使用它來演示讀取操作如何在動態緩沖區上工作,而無需執行任何真正的 IO:例如Unable to get all the data with boost asio read()

總結

更喜歡允許您安全地執行您所描述的操作的動態緩沖區。

暫無
暫無

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

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