在看公司的代碼的時候,有遇到了okhttp里面的 response.body().contentLength()調用,有點疑問:
1.httpurlconnection里面 HttpConnection.getContentLength()是直接讀的請求頭的信息,所以只要是和服務器連接成功,調用這個方法是不訪問網絡的,那么okhttp呢? okhttp的 contentLength()是讀的請求頭的數據嗎?還是調用的時候阻塞住,然后將服務端數據全部接受后返回收到的長度??
心里有了疑問,第一件事就是去看okhttp的源碼,初略看了一下,貌似沒有解決我的疑問,所以我決定自己試驗一下,試驗的過程就不說了,只是寫了一個簡單的接口,不過在寫接口的時候遇到了另外一個問題, 我在servelet里面設置了setContentLength方法,但是客戶端並沒有這個字段,查了一會才發現我的response.setContentLength()方法寫在了response.getWriter()后面,所以不生效了,嗚嗚~
好吧,直接給出試驗的結果吧:
okhttp的response.body().contentLength()方法調用的時候沒有訪問網絡(andriod平台在主線程訪問網絡會報異常),數據是來自響應頭的content_length字段。
