什么是 C# 中 Java 的 ByteBuffer.wrap 的等价物?

Posted

技术标签:

【中文标题】什么是 C# 中 Java 的 ByteBuffer.wrap 的等价物?【英文标题】:What is the equivalent of Java's ByteBuffer.wrap in C#? 【发布时间】:2013-08-04 05:33:29 【问题描述】:
byte[] input = new byte[] 2, 4, 5, 2, 1;
ByteBuffer bytebuf = ByteBuffer.wrap(input);

ByteBuffer.wrap(byte[] array)方法使缓冲区和数组相互连接,修改缓冲区会导致数组被修改,反之亦然。

C# 中ByteBuffer 的等价物是内存流。但我不知道如何将 memorystream 与 array like ByteBuffer.wrap() 方法联系起来。

谁能告诉 C# 中 ByteBuffer.wrap() 的等价物是什么? 我到处搜索,但根本找不到答案。

提前致谢。

【问题讨论】:

也许你可以看看这个问题。 ***.com/questions/10078348/… 嗨@Krishna,我读过那篇文章,但它仍然没有帮助。 我不知道链接问题中缺少什么确切行为,但请检查MemoryStream 构造函数 - 有一个使用给定数组作为缓冲区... 为什么需要这样链接数组和字节操作? 【参考方案1】:

Use a binary writer and a memory stream.

我没有将此问题标记为重复问题,只是因为您没有准确地询问其他发帖人做了什么。我不知道在这种情况下该怎么做,但仍然希望帮助你。祝你好运!

为了后代的缘故,这是该链接中的代码:

MemoryStream stream = new MemoryStream();
using (BinaryWriter writer = new BinaryWriter(stream))

    writer.Write(myByte);
    writer.Write(myInt32);
    writer.Write("Hello");

byte[] bytes = stream.ToArray();

【讨论】:

嗨@Morisson,您提供的链接正在链接回这个问题。请问可以修一下吗? 我认为这不是一个正确的解决方案。您提供的代码仅用于使用 BinaryWriter 将数组输入到内存流,它不是将流与数组连接的方法。甚至最后一个代码 byte[] bytes = stream.ToArray();将导致错误,因为无法访问该流,因为该流已被 BinaryWriter 关闭。 @NoeL - 是否愿意提供链接(MSDN?)以证明您关于ToArray 关闭/处置MemeoryStream 失败的最后陈述? @AlexeiLevenkov,ToArray() 不会关闭流,BinaryWriter 会。我没有找到任何MSDN链接,但是这里有一个问题***.com/questions/1084813/…我已经测试过了,BinaryWriter总是关闭流 @NoeL 我不确定你为什么不喜欢 MSDN,但这可能是有用的链接MemoryStream.ToArray - “注意:此方法在 MemoryStream 关​​闭时有效。”

以上是关于什么是 C# 中 Java 的 ByteBuffer.wrap 的等价物?的主要内容,如果未能解决你的问题,请参考以下文章

什么是 C# 中 Java 的 ByteBuffer.wrap 的等价物?

java和c#的字节数组转换问题

C#中的泛型是啥意思?

C#面试题0_编码题_下列代码输出的是什么_Java instanceof用法

JAVA哪些特性是C#做不到的?

您可以在 Java 中获得的最接近 C# 内部修改的内容是啥?