我有一个带有公共字节数组的类。让我们说吧
Public myBuff as byte()
类中的事件以字节数组的形式获取数据块。我如何告诉事件代码在最后粘贴get块?让我们说
Private Sub GetChunk
Dim chunk as byte
'... get stuff in chunk
Me.myBuff += chunk '(stick chunk on end of public array)
End sub
或者我完全忽略了这一点?
答案 0 :(得分:1)
如果我没记错的话,在vb中你想要使用preserve来重新生成数组。
答案 1 :(得分:1)
如果数组很小,并且不经常添加新数据,那么最简单的方法是:
public BufferSize as long 'or you can just use Ubound(mybuff), I prefer a tracker var tho
public MyBuff
private sub GetChunk()
dim chunk as byte
'get stuff
BufferSize=BufferSize+1
redim preserve MyBuff(buffersize)
mybuff(buffersize) = chunk
end sub
如果chunk是一个字节数组,它看起来更像是:
buffersize=buffersize+ubound(chunk) 'or if it's a fixed-size chunk, just use that number
redim preserve mybuff(buffersize)
for k%=0 to ubound(chunk) 'copy new information to buffersize
mybuff(k%+buffersize-ubound(chunk))=chunk(k%)
next
如果您经常这样做(比方说,每秒多次),您会想要像StringBuilder类一样工作:
public BufSize&,BufAlloc& 'initialize bufalloc to 1 or a number >= bufsize
public MyBuff() as byte
sub getdata()
bufsize=bufsize+ubound(chunk)
if bufsize>bufalloc then
bufalloc=bufalloc*2
redim preserve mybuff(bufalloc)
end if
for k%=0 to ubound(chunk) 'copy new information to buffersize
mybuff(k%+bufsize-ubound(chunk))=chunk(k%)
next
end sub
每次指针通过缓冲区末尾时,基本上会将分配给mybuf的内存加倍。这意味着更少的内存改变。
答案 2 :(得分:0)
您将不断使用ReDim关键字,非常效率低下。
你在使用.Net吗?如果是这样,请考虑使用System.Collections.Generic.List(Of Byte)。您可以使用它的.AddRange()方法来附加您的字节,如果您确实需要,可以使用.ToArray()方法来取回数组。
答案 3 :(得分:0)
您的问题似乎不太清楚。您可能不应该将字节数组作为公共字节。它应该是私有的,你应该提供一组公共函数,允许类的用户对数组执行操作。
答案 4 :(得分:0)
我认为你可能正在寻找除数组之外的东西。如果您尝试逐步扩展数据量,则应使用动态数据结构,例如ArrayList
。这有一个Add
方法,可以将特定对象或值添加到数组中,而无需考虑空间。它还有一个漂亮的ToArray()
方法,您可以使用它。
如果您出于特定原因(性能,我猜)尝试使用数组,请使用ReDim Preserve array(newSize)
。