2012-11-01 80 views
1

我想從服務器讀取JSON編碼的字節,這將縮進,但不可預知的長度,並沒有明顯的終止字節。我想將整個整個服務器的響應讀入一個字節。服務器將關閉連接。是否可以使用net來做到這一點?閱讀,直到服務器關閉連接

回答

4

爲補充@minikomi的答案,我想補充一點,如果你確信從服務器返回的字節是JSON編碼,有一個漂亮的包裝encoding/json這一點。

http://golang.org/pkg/encoding/json/

如果您使用的解碼器直接從連接解碼,有時可能無法返回的錯誤。您可能想要使用fmt.Printf("%v\n", whateverDecodedFromTheConnection)來查看解碼器在連接關閉時獲取的結構。

例如,在我的情況下,當解碼器encoding/gob用於解碼從TCP連接成一個結構定義爲消息:

type MessageType struct { 
    Type uint8 
} 

當連接關閉時,返回decoder.Decode(&buffer){0}。這可能不是常見的情況,但需要注意的地方。

2

請看看該文檔在http://golang.org/pkg/net/http/

一個HTTP Get會返回一個Response結構,這將有io.ReadCloser類型的主體。您可以使用ioutil.ReadAll來讀取對字節數組的整個響應。

resp, err := http.Get("http://example.com/") 
if err != nil { 
    // handle error 
} 
defer resp.Body.Close() 
body, err := ioutil.ReadAll(resp.Body) 
+0

這很好理解,但不幸的是我沒有使用'net/http'。 –