gpt4 book ai didi

dart - 没有镜像包的flutter中如何使用ByteData和ByteBuffer

转载 作者:IT王子 更新时间:2023-10-29 06:54:59 26 4
gpt4 key购买 nike

我正在尝试开发一个 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 代码在 d.data.buffer 处给我一个错误说The getter 'buffer' isn't defined for the class 'List<int>'.

import dart:mirror;似乎在 flutter 和 this page 中不起作用说 Dart 镜像在 Flutter 中被阻止了。

由于我无法导入 dart 镜像以从数据报套接字获取字节缓冲区,我还能如何做到这一点?

最佳答案

d.data 的类型素色List<int> , 不是 Uint8List . List没有 buffer setter/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);

关于dart - 没有镜像包的flutter中如何使用ByteData和ByteBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51801051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com