gpt4 book ai didi

arrays - 通过 Golang 中的 Websocket 发送和接收 [][] 字节

转载 作者:数据小太阳 更新时间:2023-10-29 03:12:18 25 4
gpt4 key购买 nike

我有一个二维字节数组:

data := [][]byte{{104, 105}, {104, 105}}

我需要通过 websocket 连接传输,但我没有找到一种方法来转换这个数组,因此我可以在我的 java 客户端上有效地将它重新转换回二维数组。

func socketManager (connection *websocket.Conn ){

fmt.Print("Websocket connection established ")

//determining the request
for {

//awaiting messages from clients
messageType, message, err := connection.ReadMessage()
if err != nil {
//ending connection when error accursed
Logger.LogError(err.(error).Error())
break
}

data := [][]byte{{104, 105}, {104, 105}}

//How can I send this two dimensional byte array?
err = connection.WriteMessage(websocket.BinaryMessage, message)
if err != nil {
log.Println("write:", err)
break
}




err = connection.WriteMessage(messageType, message)
if err != nil {
log.Println("write:", err)
break
}

}

//closing the connection
defer connection.Close()
}

最佳答案

多维数组通常根据它们的维度(即“宽度”和“高度”)和它们的内容(应分解为组成“行”或“列”的单个项目的整个列表)来定义).但是,如果组成数组的长度可能不同,那么您可能完全需要另一种方法。

您的任务是决定您希望如何序列化此数据,以便您的客户端可以对其进行反序列化,并强调此传输的任何关键方面(例如数据大小、性能、互操作性的简易性等)。

以下是一些可能的解决方案:

  1. 矩阵维度和内容。如果您的数据始终具有一致的“宽度”和“高度”,那么您可以使用原始编码来序列化表示这些值的两个 uint16(或其他适当的大小),然后序列化原始序列字节。要反序列化,客户端只需要读取两个整数即可知道矩阵的维度,然后可以相应地填充其余数据。示例消息可能如下所示(十六进制字节):

    0002 0002 6869 6869

  2. 长度和内容。如果每个子数组可以有不同的长度,那么你可以简单地原始编码“长度”的元组序列(例如 uint32)和原始字节内容,例如(作为十六进制字节):

    0000 0002 6869 0000 0002 6869

  3. JSON 和 Base64。如果互操作性和易于集成更为重要(并且大数据量不是主要问题),那么您可以简单地将数据序列化为 JSON 字符串数组,每个字符串都是 Base64 编码的字节数组。这样,客户端只需要反序列化 JSON 数组和 Base64 解码每个元素。该解决方案还可以轻松地允许不同大小的子阵列。示例消息可能如下所示(作为 JSON 字符串):

    ["aGk=","aGk="]

最终,go 有 many builtin encoding packages您可以使用它来序列化此数据。没有单一的“正确”答案,因此您的实现选择应由您的业务需求决定。

关于arrays - 通过 Golang 中的 Websocket 发送和接收 [][] 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48117381/

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