これは単純なものであり、私が答えたと思ったものです。私はここで答えを見つけようとしましたが、何も思いつきませんでした-私が見逃したものがある場合はお詫びします。
とにかく、StringBuilderに相当するものはありますが、バイト配列用ですか?
Append()
のさまざまなオーバーロードのすべてについて気にする必要はありませんが、Append(byte)
とAppend(byte[])
を見たいと思います。
周りに何かありますか、それとも自分の時間ですか?
MemoryStream
はあなたのために働きますか?インターフェースはそれほど便利ではないかもしれませんが、バイトを追加する簡単な方法を提供し、完了したら、 ToArray()
を呼び出すことでコンテンツをbyte[]
として取得できます。 。
よりStringBuilder
のようなインターフェースは、おそらく拡張メソッドを作成することで実現できます。
更新
拡張メソッドは次のようになります。
public static class MemoryStreamExtensions
{
public static void Append(this MemoryStream stream, byte value)
{
stream.Append(new[] { value });
}
public static void Append(this MemoryStream stream, byte[] values)
{
stream.Write(values, 0, values.Length);
}
}
使用法:
MemoryStream stream = new MemoryStream();
stream.Append(67);
stream.Append(new byte[] { 68, 69 });
byte[] data = stream.ToArray(); // gets an array with bytes 67, 68 and 69
MemoryStream
アプローチは適切ですが、StringBuilderのような動作が必要な場合は、 BinaryWriter
を追加してください。 BinaryWriterは、必要なすべての書き込みオーバーライドを提供します。
MemoryStream stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(stream);
writer.Write((byte)67);
writer.Write(new byte[] { 68, 69 });
多分 - List<byte>
:
var byteList = new List<byte>();
byteList.Add(42);
byteList.AddRange(new byte[] { 1, 2, 3 });
_List<byte>
_次に、配列として必要な場合は、ToArray()
を呼び出すことができます。
using System;
using System.IO;
public static class MemoryStreams
{
public static MemoryStream Append(
this MemoryStream stream
, byte value
, out bool done)
{
try
{
stream.WriteByte(value);
done = true;
}
catch { done = false; }
return stream;
}
public static MemoryStream Append(
this MemoryStream stream
, byte[] value
, out bool done
, uint offset = 0
, Nullable<uint> count = null)
{
try
{
var rLenth = (uint)((value == null) ? 0 : value.Length);
var rOffset = unchecked((int)(offset & 0x7FFFFFFF));
var rCount = unchecked((int)((count ?? rLenth) & 0x7FFFFFFF));
stream.Write(value, rOffset, rCount);
done = true;
}
catch { done = false; }
return stream;
}
}