这是从网络流(vb.net)读取的最佳代码吗?
我知道这是主观的,但这是我根据上一个问题的答案得出的结果,似乎有点“拼凑”,因为我对它做了很多修改:这是从网络流(vb.net)读取的最佳代码吗?,.net,vb.net,arrays,performance,.net,Vb.net,Arrays,Performance,我知道这是主观的,但这是我根据上一个问题的答案得出的结果,似乎有点“拼凑”,因为我对它做了很多修改: Private Function ReadFromBuffer(ByVal objReader As NetworkStream) As Byte() Dim intRead As Integer = 1024 Dim allBytes(-1) As Byte While intRead = 1024 Dim byteTempbuffer(1023)
Private Function ReadFromBuffer(ByVal objReader As NetworkStream) As Byte()
Dim intRead As Integer = 1024
Dim allBytes(-1) As Byte
While intRead = 1024
Dim byteTempbuffer(1023) As Byte
intRead = objReader.Read(byteTempbuffer, 0, 1024)
ReDim Preserve byteTempbuffer(intRead - 1)
Dim tempold(allBytes.Length - 1) As Byte
tempold = allBytes
allBytes = tempold.Concat(byteTempbuffer).ToArray
End While
Return allBytes
End Function
基本上,有没有更好的编写方法(哪怕只是部分代码)或更有效的方法?
基本上,代码是用来一次从1024字节的网络流中读取所有字节的。每次读取字节时,它都会将其放入一个数组中并返回
我认为如果
intRead
小于1024,则最好只使用RedimbyteTempbuffer
(Redim是为了防止在网络流中剩余的1024字节不足时将空字节添加到数组的末尾)(基本上,每次重拨或者只在需要时执行if语句和重拨更有效)这绝对不是最好的方法:在循环的每次迭代中,您都分配一个新的缓冲区,比前一个缓冲区大……这可能会给GC带来很大的压力
如果您不知道数据的总长度,可以使用MemoryStream
:
Private Function ReadFromBuffer(ByVal objReader As NetworkStream) As Byte()
Dim intRead As Integer = 1024
Dim byteTempbuffer(1023) As Byte
Dim allBytes As New MemoryStream
While intRead = 1024
intRead = objReader.Read(byteTempbuffer, 0, 1024)
allBytes.Write(byteTempbuffer, 0, intRead)
End While
Return allBytes.ToArray()
End Function
谢谢,我想有更好的方法:)我想这应该放在codereview.stackexchange.com上