2014年7月23日 星期三

[]byte 轉型 string 必須注意 []byte 的長度

常常需要從 []byte 轉換到 string,來使用 string 的功能。
但是必須注意的是 []byte 並不一定是以 0x00 結束,如果就直接轉型到string,而直接使用strings的一些函式。“有時”就會造成不可預期的結果。像是我要從socket讀取資料,先建立了一個BUF_SIZE的[]byte array,這個大小是2M Bytes。

read_buf := make([]byte, BUF_SIZE)
byte_count, err := conn.Read(read_buf)
log.Println("Receive ", byte_count, " bytes\n", string(read_buf))

跑到Println的時候,發現而且ssh連線幾乎沒有反應。找了又找,後來發現到是Println花很久的時間。我才意會到,原來golang還是要處理結束字元。所以[]byte轉換string的時候,必須要知道byte的長度。因此Println改成下面代碼就解決了問題

log.Println("Receive ", byte_count, " bytes\n", string(read_buf[:byte_count]))

沒有留言: