各位同仁:
本人初次尝试使用golang进行开发。在用go进行socket对接java服务时需要读取数据流中的各种类型。
java的java.io.DataInputStream类有各种数据读取的实现,如readInt, readFloat, readUTF等。
目前在go中同样实现相应的方法,本人尝试
var x int32
bbuf := bytes.NewBuffer(b)
c, := b_buf.ReadByte()
fmt.Println(c)
binary.Read(b_buf, binary.BigEndian, &x)
fmt.Println(x)
可以读取int类型的数据。但是针对readUTF这种字符串类型的数据目前还不清楚如何操作。请各位大神给予帮助。
同时本人尝试使用 b3 := make([]byte,12) l,err:=b_buf.Read(b3) fmt.Println(l) fmt.Println(err) fmt.Println(string(b3)) 此方法进行字节获取转化为string输出,发现可以转化成utf8的内容,中间有不少NUL STX占位符。最重要的是要去读的字符串需要的字节长度如何确认呢?? 在java中使用readUTF可以直接从流中获得字符串的内容,在golang中如何实现类似java的readUTF功能!
谢各位!!
有疑问加站长微信联系(非本文作者)

已经解决,和大家共勉。 // 因为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)
}
已经解决,和大家共勉。
建议用protocolbuff