用于字节数组的StringBuilder的等效项

这是一个简单的,我认为可以回答的问题。 我确实试图在这里找到答案,但没有提出任何答案 – 如果有我错过的东西,请道歉。

无论如何,是否有相当于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

 var byteList = new List(); byteList.Add(42); byteList.AddRange(new byte[] { 1, 2, 3 }); 

List然后当你想要它作为数组时,你可以调用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 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; } }