所以我創建了一個軟件,簡而言之,它包含一個原始字節序列和新字節的列表,這些字節需要更改爲文本形式「原來的位置(目前與序列無關,可能在不同的地方)$ 56,69,71,73,75,77:56,69,71,80,50,54」vb.net高效地查找字節數組中的字節序列
我已經擁有可以正常工作的代碼,但是可以找到和改變多達600多個這樣的序列,並且在某些情況下,它需要15分鐘+的非常長的時間,我認爲這取決於找到它們的序列需要多長時間所以我試圖找到一個更好的方式來做到這一點,因爲目前它是不可用的,由於需要多長時間。
我已經複製了整個代碼下面這個功能,希望你們中的一個好心人可以看看,並幫助=)
Dim originalbytes() As Byte
Dim fd As OpenFileDialog = New OpenFileDialog() fd.Title = "Select the file" fd.Filter = "All files (*.*)|*.*|All files (*.*)|*.*" fd.FilterIndex = 2 If fd.ShowDialog() = DialogResult.OK Then TextBox2.Text = fd.FileName originalbytes = File.ReadAllBytes(fd.FileName) End If Dim x As Integer = 0 Dim y As Integer = 0 Dim textbox1array() = TextBox1.Lines Dim changedbytes() = originalbytes Dim startvalue As Integer = 0 Dim databoxarray() As String Dim databoxarray2() As String While x < textbox1array.Length - 1 'for each change to make databoxarray = textbox1array(x).Replace(" $ ", vbCr).Replace(" : ", vbCr).Split databoxarray2 = databoxarray(1).Replace(",", vbCr).Split Dim databox2bytes() As String = databoxarray2 'copy original bytes line to databox2 lines y = 0 While y < (originalbytes.Length - databox2bytes.Length) 'repeat for all bytes in ori file - size of data to find If originalbytes(y) = databox2bytes(0) Then startvalue = y Dim z As String = 1 Dim samebytecounter As Integer = 1 While z < databox2bytes.Length 'repeat for all ori bytes If originalbytes(y + z) = databox2bytes(z) Then samebytecounter = samebytecounter + 1 End If z = z + 1 End While If samebytecounter = databox2bytes.Length Then 'same original data found, make changes Dim bytestoinsert() As String = databoxarray(2).Replace(",", vbCr).Split Dim t As Integer = 0 While t < bytestoinsert.Length changedbytes(startvalue + t) = bytestoinsert(t) t = t + 1 End While End If End If y = y + 1 End While x = x + 1 End While File.WriteAllBytes(TextBox2.Text & " modified", changedbytes)
任何機會,你可以添加一些潛在的測試將要創建的休息數據和值在不同的文本框中輸入?我也沒有看到你定義'originalbytes'的地方。如果這是工作代碼,也許最好在codereview – Icepickle
上發佈這個問題對不起,原始字節在另一個函數中作爲字節數組加載,不幸的是我不能共享其中一個文件,因爲它們是私有的=( –
你能不能至少分享它的定義和對象類型? – Icepickle