1

バイトのパブリック配列を持つクラスがあります。それを言いましょう

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

または、私は完全にポイントを逃していますか?

4

5 に答える 5

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

チャンクがバイト配列の場合、次のようになります。

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 倍にします。これは、メモリのシャッフルがはるかに少ないことを意味します。

于 2008-09-16T22:42:18.827 に答える
1

私の記憶が正しければ、vb では、preserve を使用して配列を拡張したいと考えています。

于 2008-09-16T21:36:43.383 に答える
0

配列以外のものを探しているのではないかと思います。データ量を徐々に頻繁に拡張しようとしている場合は、などの動的データ構造を使用する必要がありますArrayList。これには、Addスペースを気にせずに特定のオブジェクトまたは値を配列に追加するメソッドがあります。それはまたあなたが使うことができる気の利いたToArray()方法を持っています。

特定の理由(パフォーマンス、私は推測)で配列を使用しようとしている場合は、を使用してReDim Preserve array(newSize)ください。

于 2008-09-16T21:41:37.817 に答える
0

ReDim キーワードを常に使用することになりますが、これは非常に非効率的です。

.Net を使用していますか? その場合は、代わりに System.Collections.Generic.List(Of Byte) の使用を検討してください。.AddRange() メソッドを使用してバイトを追加し、.ToArray() メソッドを使用して、本当に必要な場合に配列を元に戻すことができます。

于 2008-09-16T21:37:55.533 に答える
0

あなたの質問はあまり明確ではないようです。おそらく、バイト配列をパブリックとして持つべきではありません。おそらくプライベートにする必要があり、クラスのユーザーが配列に対して操作を実行できるようにする一連のパブリック関数を提供する必要があります。

于 2008-09-16T21:38:06.577 に答える