相当于 C# 中 Java 的 ByteBuffer.wrap
本文关键字:ByteBuffer wrap Java 相当于 | 更新日期: 2023-09-27 18:26:25
byte[] input = new byte[] {2, 4, 5, 2, 1};
ByteBuffer bytebuf = ByteBuffer.wrap(input);
ByteBuffer.wrap(byte[] array)
方法使缓冲区和数组相互连接,对缓冲区的修改将导致数组被修改,反之亦然。
C# 中与ByteBuffer
等效项是内存流。但是我不知道如何像ByteBuffer.wrap()
方法那样将内存流与数组连接起来。
有人能说出 C# 中ByteBuffer.wrap()
的等价物吗?我到处寻找,但根本找不到答案。
提前谢谢。
使用二进制编写器和内存流。
我没有将这个问题标记为重复,只是因为你没有准确地问另一个海报做了什么。在这种情况下,我不确定该怎么办,但仍然希望为您提供帮助。 祝你好运!
为了后代,以下是该链接中的代码:
MemoryStream stream = new MemoryStream();
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(myByte);
writer.Write(myInt32);
writer.Write("Hello");
}
byte[] bytes = stream.ToArray();
wrap
的等价物是使用MemoryStream
的构造函数,该构造函数采用byte[]
:MemoryStream(byte[])
。这会"包装"原始数组,因此是一个固定大小的缓冲区。
byte[] input = new byte[] {2, 4, 5, 2, 1};
using var ms = new MemoryStream(input);
与另一个答案的对比是,这保留了数组的内容(如果您想从中读取内容很重要(并且不会创建任何副本,我知道这是您问题的重点。
否则,要将逻辑值读/写到缓冲区/流,答案与现有答案大致相同:使用 StreamWriter
和/或 StreamReader
。
using (var bw = new BinaryWriter(ms, Encoding.UTF8, leaveOpen: true))
{
bw.Write(12356789);
try
{
bw.Write(12356789); // additional write will throw due to lack of space
}
catch {}
}
using (var br = new BinaryReader(ms, Encoding.UTF8, leaveOpen: true))
{
// reset position before reading
ms.Position = 0;
Console.WriteLine(br.ReadInt32());
}
// check we modified the original buffer (ToArray would return a copy)
Console.WriteLine(String.Join(", ", input));