相当于 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()的等价物吗?我到处寻找,但根本找不到答案。

提前谢谢。

相当于 C# 中 Java 的 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));