我正在尝试为 GJS 中的 chrome/firefox 扩展编写本机消息传递主机(因为它将依赖已经用 GJS 编写的代码),但遇到了一些障碍。我使用chrome-gnome-shell作为粗略模板,因为它还使用 GLib/Gio 自省和 GApplication,但它具有struct
我没有的 python 优势。
很快,本地消息传递主机通过 stdin/stdout 交换消息,这些消息是 Int32(4 字节)长度,后跟一串 utf-8 编码的 JSON。
chrome-gnome-shell 使用GLib.IOChannel
withset_encoding('utf-8')
和struct
来处理 int32 字节。我在 GJS 中使用该类时遇到了麻烦,并且没有struct
尝试使用/和/Gio.UnixInputStream
包裹Gio.DataInputStream
(和输出对应物)。put_int32()
read_int32()
put_string()
read_string()
显然,我对自己在做什么感到非常困惑。如果我调用Gio.DataInputStream.read_int32()
它返回一个数字369098752
,所以我猜测 int32 没有被转换为常规数字。如果我打电话Gio.DataInputStream.read_bytes(4, null).unref_to_array()
得到一个字节数组;ByteArray.toString()
返回 '\u0016' 而 ByteArray[0] 返回似乎是实际长度的 '22'。
一些关于读取/写入 int32 到数据流的指针,将不胜感激。
chrome-gnome-shell 参考: