我發現了一種快速匹配二進制幀的方法。 長度與整數和部分c(有效負載)相匹配的長度與長度字段中聲明的八位字節數一樣多。 (前三個八位字節)在解析HTTP/2.0幀的elixir二進制文件中匹配多個部分
<<length::24, b::48, c::binary-size(length)>> <> rest = buffer
問題是得到我的幀我需要重新組合部分。
frame = <<length::24, b::48, c::binary>>
有沒有辦法在原始匹配中分配幀變量。像下面這樣。 儘管這種精確的版本不起作用
(frame = <<length::24, _::48, _::binary-size(length)>>) <> rest = buffer
編輯,或一些類似下面的語法也將使意義
<< frame = <<length::24, _::48, _::binary-size(length)>>, rest::binary>>
您可能已經知道這一點,但爲了防止重新創建二進制文件,可以使用':binary.part(buffer,0,3 + 6 + length)'。 ':binary.part/3'將從原始'buffer'中創建一個子二進制文件,而不是分配一個新的二進制文件。 – Dogbert
我不知道這聽起來有幫助,仍然是一個兩步驟的過程來獲得我想要的二進制文件,但很可能非常快 –