簡體   English   中英

更快的方法將字節數組轉換為vb中的二進制?

[英]faster way to convert byte array into binary in vb?

我想將字節數組轉換為二進制,例如:“ 01010101”。 使用小文件,它可以轉換而沒有任何問題,但是轉換大文件花的時間太長了(即使僅5mb,我也無法想象會有更大的文件)。 有沒有更快的方法將此字節數組轉換為二進制,反之亦然? 這是我的代碼

Public Function conv_FileToByte(ByVal filename As String)

    Dim convFileToByte_array() As Byte
    Dim fs As New FileStream(filename, FileMode.Open, FileAccess.Read)
    Dim fileData As Byte() = New Byte(fs.Length - 1) {}

    Console.WriteLine("reading file data")
    fs.Read(fileData, 0, Convert.ToInt32(fs.Length))
    fs.Close()
    Console.WriteLine("close stream")


    convFileToByte_array = fileData

    Console.WriteLine("Returning value")

    Return convFileToByte_array

End Function


Public Function conv_ByteToBin(ByVal conv() As Byte)

    'Dim newBin As New List(Of String)
    Dim newBin As String = Nothing
    For Each c In conv
        'newBin.Add(Convert.ToString(c, 2).PadLeft(8, "0"))
        Dim temp_bin As String
        temp_bin = Convert.ToString(c, 2).PadLeft(8, "0")
        newBin = newBin & temp_bin
    Next
    Console.WriteLine("Returning value")

    Return newBin
End Function


Public Function conv_BinToByte(ByVal binValue As String)


    Dim count_binValue As String = binValue.Count

    Dim temp_binValue As New List(Of String)


    Dim bins As New Byte()
    Dim binlist As New List(Of Byte)

    For i As Integer = 0 To count_binValue - 1 Step 8


        Dim temp_value As String
        temp_value = binValue.Substring(i, 8)


        Dim convert_temp As String

        convert_temp = Convert.ToInt32(temp_value, 2)

        temp_binValue.Add(convert_temp)
    Next

    For Each bl In temp_binValue
        binlist.Add(bl)
    Next


    Dim binData As Byte() = New Byte(binlist.Count - 1) {}
    For bd As Integer = 0 To binlist.Count - 1
        binData(bd) = binlist(bd)
    Next

    Return binData

End Function

您正在conv_ByteToBin方法中串聯很大的字符串。 在這種情況下,使用基本的字符串連接是非常不好的做法,這似乎是您的瓶頸。 我只是將該方法更改為使用StringBuilder,因為它是連接大型字符串的有效方法,並且代碼運行的速度快得多:

Public Function conv_ByteToBin(ByVal conv() As Byte) As String
    Dim newBin As New StringBuilder

    For Each c In conv
        newBin.Append(Convert.ToString(c, 2).PadLeft(8, "0"))
    Next
    Console.WriteLine("Returning value")

    Return newBin.ToString
End Function

最佳做法提示:

  • 始終在方法中使用返回類型
  • FileStream實現iDisposable-始終對實現iDisposable的對象使用block

同樣,您的方法conv_FileToByte是不相關的,因為.net已經內置了File.ReadAllBytes-方法,該方法可以執行相同的操作。 只需調用它並刪除自己的實現即可。

暫無
暫無

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

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