配列が小さく、新しいデータが頻繁に追加されない場合、簡単な方法は次のとおりです。
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
チャンクがバイト配列の場合、次のようになります。
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
これを頻繁に (たとえば、1 秒間に何回も) 行う場合は、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 倍にします。これは、メモリのシャッフルがはるかに少ないことを意味します。