2013-09-05 30 views
0

飞镖快速变化,所以我没有找到一种方法从HttpResponse获取数据流,通过websocket发送任意(甚至是二进制)数据。即使文件IO现在也没有openInput/OutputStream。目前在飞镖处理数据流的概念是什么?关于数据流的飞镖概念是什么?

我真的想得到一种抽象的数据流对象(如C#中的System.IO.Stream)来实现它的序列化接口,然后将其应用到websocket数据流,所以我可以更改我的序列化格式网络数据包以及未来新的串行器实现,或者创建内存流对象(如C#中的System.IO.MemoryStream)以获取内存中的序列化数据。

最后 - 是否有可能使用websockets发送二进制数据?

Thanx。

回答

1

HttpRequest in dart:io implements Stream<List<int>>。在流上获取数据侦听。最近在API文档中添加了一个示例http://api.dartlang.org/docs/releases/latest/dart_io/HttpRequest.html。 包的https://pub.dartlang.org/packages/http_server包含许多用于处理HTTP的实用程序类。

WebSocket实现了StreamStreamSink。在侦听流时,根据是否发送字符串消息或二进制数据消息,收到的对象类型为StringList<int>。同样,您可以将类型StringList<int>的对象添加到WebSocket以发送消息。

收到的二进制数据将来自dart:typed_data库的Uint8List类型。发送二进制数据时,我会建议使用Uint8List

由于WebSocket使用流所有包括转换的流的功能都可用。

+0

这是否意味着我必须始终使用WebSocket.add来写入数据和HttpRequest(Stream).listen从流中读取数据?这看起来很丑。我在这里有异步双向二进制协议,不知道如何使用dart实现它。听起来像我必须将所有内容读入内存,然后反序列化,并在发回数据时保持相同。 –

+0

哦,对不起。我发现WebSocket.listen方法也可用。但是这不会改变任何内存开销。 –