gpt4 book ai didi

go - 如何确定golang中连接的确切字节长度?

转载 作者:IT王子 更新时间:2023-10-29 02:37:04 26 4
gpt4 key购买 nike

我有以下代码:

var buf []byte
read_len, err := conn.Read(buf)
if err != nil {
fmt.Println("Error reading:", err.Error())
}
buffer := make([]byte, read_len)
_, err = conn.Read(buffer)
if err != nil {
fmt.Println("Error reading:", err.Error())
}

目的是用第一个 buf 确定 read_len,然后创建第二个 buffer,这是传入 json 请求的确切长度.这只会导致错误

unexpected end of JSON input

当我尝试解码时

var request Device_Type_Request_Struct
err = json.Unmarshal(buffer, &request)

我假设发生此错误是因为 conn.Read(buffer) 没有返回任何内容,因为另一个缓冲区已读取它(虽然不确定)。我应该如何确定 json 请求的长度,同时又能将其读入缓冲区(长度完全相同)?

最佳答案

Read返回读取到缓冲区的字节数。因为传递给第一次调用 conn.Read 的缓冲区长度为零,所以第一次调用 conn.Read 总是返回零。

如果不读取数据,就无法确定对等点发送了多少数据。

这个问题的简单解决方案是使用 JSON decoder :

d := json.NewDecoder(conn)
var request Device_Type_Request_Struct
if err := d.Decode(&request); err != nil {
// handle error
}

解码器从流中读取和解码 JSON 值。

关于go - 如何确定golang中连接的确切字节长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51885957/

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