无法从“System.ReadOnlyMemory<byte>”转换为“byte[]”
1、问题复现
RabbitMQ的官方示例:RabbitMQ消费端(接收端)获取消息时抛出异常,具体代码如下
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body); // <------错误点
Console.WriteLine(" [x] Received {0}", message);
};
2、解决办法
查看定义可以看到Encoding.UTF8.GetString重载的方法有多个,参数为字节数组或其指针或只读的字节跨度。

RabbitMQ更新API的地址:https://github.com/rabbitmq/rabbitmq-dotnet-client/commit/8bf93082fd2c18bbd6adff260d38a6fd34d6840b
接下来说下解决办法
① ToArrary()
示例是之前的示例,现在官方示例已更正,最新示例地址:https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body.ToArray(); // 将内存区域的内容复制到一个新的数组中
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
};
② Span
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body.Span; // 从内存区域获取一个跨度
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
};
以上就是无法从“System.ReadOnlyMemory<byte>”转换为“byte[]”的介绍,做此记录,如有帮助,欢迎点赞关注收藏!
无法从“System.ReadOnlyMemory<byte>”转换为“byte[]”的更多相关文章
- C# IntPtr转换为Byte[]
[DllImport("OpenNetStream.dll")] public static extern int OpenSDK_Data_GetDevList(IntPtr s ...
- asp.net AES加密跟PHP的一致,将加密的2进制byte[]转换为16进制byte[] 的字符串获得
<?php class AESUtil { public static function encrypt($input, $key) { $size = mcrypt_get_block_siz ...
- 从byte数组byte[]转换为bitmapsource以及反射实现属性批量赋值
从byte数组byte[]转换为bitmapsource (BitmapSource)new ImageSourceConverter().ConvertFrom(b) 名字有规律的属性代码用反射优美 ...
- 网络流转换为Byte数组
/// <summary> /// 网络流转换为Byte数组 /// </summary> /// <param name="stream">& ...
- 16进制字符串转换为byte数组
/// <summary> /// 16进制字符转换为byte数组 /// </summary> /// <param name="hexString" ...
- C#中使用Buffer.BlockCopy()方法将string转换为byte array的方法:
public static void BlockCopy(Array src, int srcOffset, Array dst, int dstOffset, int count); 将指定数目的字 ...
- 如何在 Go 中将 []byte 转换为 io.Reader?
原文链接: 如何在 Go 中将 []byte 转换为 io.Reader? 在 stackoverflow 上看到一个问题,题主进行了一个网络请求,接口返回的是 []byte.如果想要将其转换成 io ...
- short a = 128, byte b = (byte)a 强制类型转换
package 笔试; public class ShortToByte { /** * @param args */ public static void main(String[] args) { ...
- new String(byte[])和byte[]toString() 的区别
byte[]字节数组的toString()获得的字符串和使用new String(byte[])构造一个新的字符串,这两个字符串是不一样的.Java对象都继承于Object,Object中提供了toS ...
- Byte和byte[]数组
Byte和byte[]数组,“表示一个 8 位无符号整数, 一般为8位二进制数”. Byte是计算机最基础的存储单位和最基础的通讯单位. 而所有的类型都是支持由byte[]类型转换而来. 为什么说By ...
随机推荐
- leetcode学习记录2.13
[13] 罗马数字转整数 import java.util.HashMap; import java.util.Map; /* * * [13] 罗马数字转整数 * * https://leetcod ...
- 树莓派(香橙派)通过.NET IoT 操作SPI编写屏幕驱动 顺手做个四足机器人(一)
摘要 这片文章主要是记录自己的整活过程,涉及到的技术包括.NET IoT, .NET Web, .NET MAUI,框架采用的也是最新的.NET 7. 本人是用的树莓派Zero 2 W(ubuntu- ...
- 【RocketMQ】顺序消息实现原理
全局有序 在RocketMQ中,如果使消息全局有序,可以为Topic设置一个消息队列,使用一个生产者单线程发送数据,消费者端也使用单线程进行消费,从而保证消息的全局有序,但是这种方式效率低,一般不使用 ...
- K8S kubesphere安装mysql
原先我们使用Docker按照mysql时候的命令 docker run -p 3306:3306 --name mysql-01 \ -v /mydata/mysql/log:/var/log/mys ...
- Easy-Classification-验证码识别
1.背景 Easy-Classification是一个应用于分类任务的深度学习框架,它集成了众多成熟的分类神经网络模型,可帮助使用者简单快速的构建分类训练任务. 案例源代码 Easy-Classi ...
- 关于cannot remove ‘directory': Directory not empty的解决办法
解决方法 首先你应该使用 rm -rf 目录名 这样确保可以递归删除目录 如果出现 cannot remove 'directory': Directory not empty 报错信息,重启电脑解决 ...
- springcloudgateway学习
API网关 大型项目开发过程中,往往都是由各个不同的微服务组成的,服务可能分布在不同地区不同机房,那用户如何知道访问某服务的时候该服务的实际地址呢,这时候就需要API网关了 API 网关就像服务的门面 ...
- 【Java EE】Day08 HTML&CSS
一.表单 1.概述 采集数据,与服务器交互包括 form表单,需要提交则必须设置name属性,action方式主要包 get:参数会在地址栏显示(请求行),长度有限 post:参数被封装在请求体,参数 ...
- 04.Javascript学习笔记3
1.箭头函数 箭头函数是一种更短的函数表达式. const age = birthyear => 2022 - birthyear; console.log(age(2000)) 箭头左边的bi ...
- 深入理解Whitelabel Error Page底层源码
深入理解Whitelabel Error Page底层源码 (一)服务器请求处理错误则转发请求url StandardHostValve的invoke()方法将根据请求的url选择正确的Context ...