我正在尝试开发一个 UDP 应用程序来接收数据并将字节转换为不同的数据类型。
我有下面的代码,可以在单独使用 Dart 时使用。
import 'dart:io';
import 'dart:typed_data';
import 'dart:mirror';
RawDatagramSocket.bind(InternetAddress.ANY_IP_V4, 20777).then((RawDatagramSocket socket){
socket.listen((RawSocketEvent e){
Datagram d = socket.receive();
if (d == null) return;
ByteBuffer buffer = d.data.buffer;
DKByteData data = new DKByteData(buffer);
exit(0);
});
});
唯一的问题是,当我尝试在 Flutter 应用程序中运行它时,VS code 给了我一个错误d.data.buffer
saying The getter 'buffer' isn't defined for the class 'List<int>'.
import dart:mirror;
似乎不适用于颤振和这一页 https://github.com/flutter/flutter/issues/1150说 Dart 镜像在 Flutter 中被屏蔽。
由于我无法导入 dart 镜像以便从数据报套接字获取字节缓冲区,我还能如何做到这一点?
的类型d.data
很简单List<int>
, not Uint8List
. A List
没有buffer
getter,所以类型系统会抱怨。
如果您知道该值确实是Uint8List
或其他类型数据,您可以在使用之前对其进行强制转换:
ByteBuffer buffer = (d.data as Uint8List).buffer;
另请注意,Uint8List
不一定使用其整个缓冲区。也许做类似的事情:
Uint8List bytes = d.data;
DKByteData data = new DKByteData(bytes.buffer, bytes.offsetInBytes, bytes.lengthInBytes);
如果可能的话,并且如果DKByteData
不支持这一点,在数据未填充缓冲区的情况下,您可能需要分配一个新的缓冲区:
Uint8List bytes = d.data;
if (bytes.lengthInBytes != bytes.buffer.lengthInBytes) {
bytes = Uint8List.fromList(bytes);
}
DKByteData data = new DKByteData(bytes.buffer);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)