写一些字节到Vala中的GLib.OutputStream中

问题描述:

我正在写一个使用Vala的应用程序,需要我通过网络发送数据。为了帮助创建数据包(并在稍后的日期更新协议),我创建了一些结构,我将它们作为void *传递给方法。这些结构代表了数据包的排列方式,使我能够非常轻松地生成一个数据包,而不必乱搞太多。但是,这个问题是GLib.OutputStream.write()的Vala包装不接受计数(即使原始方法)。 Vala采用传递给它的uint8 []的大小,并将其提供给原始方法。有没有简单的方法来解决这个问题,无法编辑GIO vapi?可能是一种非常便宜的方式,在提供尺寸时将void *投射到uint8 []上?由于应用程序需要同时维护数千个连接,因此我在此期望提供非常高的性能。预先感谢您的帮助。写一些字节到Vala中的GLib.OutputStream中

〜迈克尔

我一直在使用宏是这样的:

#define OBJECT_TO_BUFFER(val,type,size) (*(size) = sizeof(type), (guint8*)val) 

要解决这个问题。它需要你的对象,并简单地返回与uint8[]相同的内存。它在瓦拉相应的原型:

unowned uint8[] Buffer.of<T>(ref T @value); 

的头文件和VAPI文件名为“招数”是in my GitHub。处理对象数组有类似的版本。

+0

谢谢:)我会试试这些。虽然没有办法通过Vala做到这一切吗?我的意思是,我不介意使用标题,因为只有我才会使用代码。我只是想知道是否可以在不需要C代码的情况下完成:) – 2012-03-26 16:02:33

unowned uint8[] buf = (uint8[]) your_real_buffer; 
buf.length = the_length_you_want; 

然后发送buf。