我有以下代码:
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())
}
目的是确定第一个read_len
与buf
,然后创建第二个buffer
,它是传入的json请求的确切长度。这只会导致错误
JSON输入意外结束
当我尝试解组
var request Device_Type_Request_Struct
err = json.Unmarshal(buffer, &request)
我假设发生此错误是因为conn.Read(buffer)
不返回任何值,因为另一个缓冲区已经读取了它(虽然不确定)。我应该如何确定json请求的长度,同时又能够将其读入缓冲区(长度完全相同)?
答案 0 :(得分:2)
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值。