关于go和java进行socket通讯时string类型的读取(ReadUTF16)

hch_work · · 4231 次点击
已经解决,和大家共勉。 // 因为JAVA中的writeUTF会自动在首部添加内容长度,所以需要根据长度进行数据切分。 func readUTF(b *bytes.Buffer)(string, error){ // 1.先获取内容长度 var n int16 bb := make([]byte,2) b.Read(bb) bb_buf := bytes.NewBuffer(bb) binary.Read(bb_buf, binary.BigEndian, &n) // fmt.Println("长度:",n) // 2.再根据长度获得字符内容 b3 := make([]byte,n) _,err:=b.Read(b3) // fmt.Println(l) // fmt.Println(err) // fmt.Println("内容:",string(b3)) // 3.最终内容转化为string并输出 return string(b3),err }
#1
更多评论
已经解决,和大家共勉。 ``` // 因为JAVA中的writeUTF会自动在首部添加内容长度,所以需要根据长度进行数据切分。 func readUTF(b *bytes.Buffer)(string, error){ // 1.先获取内容长度 var n int16 bb := make([]byte,2) b.Read(bb) bb_buf := bytes.NewBuffer(bb) binary.Read(bb_buf, binary.BigEndian, &n) // fmt.Println("长度:",n) // 2.再根据长度获得字符内容 b3 := make([]byte,n) _,err:=b.Read(b3) // fmt.Println(l) // fmt.Println(err) // fmt.Println("内容:",string(b3)) // 3.最终内容转化为string并输出 return string(b3),err } ```
#2
建议用protocolbuff
#3