在VB.NET中'列出(Of Byte())'到'Byte()'

Sha*_*yar 2 vb.net

我有一个字节列表:

Public Function GenPackets()
    Dim Stream As NetworkStream = ConnectionSocket.GetStream()
    Dim DataList As New List(Of Byte())
    Dim Data As Byte()
    DataList.Add(IntegerToByte(My.Settings.BotUID))

    ' TO DO       Stream.Write(Data, 0, 3)
    Return Data
End Function
Run Code Online (Sandbox Code Playgroud)

如何将DataList其所有字节转换为单个Byte()以供使用Stream.Write

Kon*_*lph 7

无需转换您的数据,只需遍历列表:

For Each buffer As Byte() In Datalist
    yourStream.Write(buffer)
Next
Run Code Online (Sandbox Code Playgroud)

这比首先连接所有单个数组以创建一个大数组要高效得多.

  • @Shahriyar我认为你误解了数据包是如何工作的.数据包是在更低层创建的.一次调用`Write`确实*不*对应一个数据包.写入被缓冲并以数据包的形式发送,具体取决于*size*.事实上,如果您使用的是"NetworkStream",则每个字节将由[`WriteByte`]单独写入(http://msdn.microsoft.com/en-us/library/system.io.stream.writebyte .aspx)方法无论如何. (2认同)

Oli*_*bes 5

正如Konrad Rudolph已经写过的那样,您不需要压缩数据以便将其写入流中.

为了完整起见,您可以像这样展平数据列表

Dim dataList As New List(Of Byte())
Dim data As Byte()

data = dataList.SelectMany(Function(x) x).ToArray()
Run Code Online (Sandbox Code Playgroud)

或者使用LINQ语法

data = (From bytes In dataList From x In bytes Select x).ToArray()
Run Code Online (Sandbox Code Playgroud)