HTTP那些事 超大JSON文字

2021-07-04 11:43:32 字數 1686 閱讀 1477

擴充套件閱讀:

[http那些事] json資料

[http那些事]json反序列化

在json反序列化一文的最後,有提到,如果有1m的json文字應該如何來解析?

1m的json string,不管用gson,fastjson,jackson,估計都要oom了吧。本來我想說200m的json資料的,想想這太坑了,就改說1m了。

答案,用jsonreader讀流。比如說:

public user readuser(jsonreader reader) throws ioexception  else

if (name.equals("followers_count")) else

}reader.endobject();

return

new user(username, followerscount);

}

我去,要手寫json解析了,這太麻煩了吧。。。

但是你想,跟效能比起來,這些體力也不算什麼了吧。

上述沒太多特別的地方,你可以直接看jsonreader的原始碼注釋,裡面有詳細的用法示例。

在這裡呢,我們先說說如何讓jsonreader來讀大json文字。

filereader in = new filereader(path);

jsonreader reader = new jsonreader(in);

首先,你得先把json文字以檔案的形式存到sd卡上。再通過filereader拿到檔案流,再通過jsonreader來讀流,讀流的方式也就意味著是順序讀的,所以即使它不是正確的json格式,也會一直讀到錯誤為止。

jsonreader對手寫的json解析語法非常嚴格,寫錯是非常頭疼的事,另外建議把nodename變為常量去做判斷,不然以後改變量名得哭瞎。

簡單說下實現過程:

首先寫個介面,比如jsonreaderable,裡面定義乙個方法readfromjson(jsonreader reader)

讓你想要被反序列化的物件pojo實現這個介面,比如這樣

在callback之前再binddata,比如這樣

如果是jsonarray怎麼辦,我們要返回乙個arraylist啊。比如這樣

乙個好的框架相當的重要啊,我們再來看外層的呼叫

這種情況雖然比較少見,但在一些erp啊,sap專案中經常會遇到(別問stay怎麼知道)如果你也見過android上500m的資料庫,那這些心得你都能自己領悟到了。

其實這個擴充套件其他第三方框架也沒什麼問題,只要思路有了,實現起來也就很容易了。

就寫到這裡,別問stay要**哈,只講思維與解決方案,如果你想知道這個http框架是如何從0到1的寫出來的,可以看看stay出的課程自己動手寫http框架

HTTP協議那些事

1 http全程是hypertext transfer protocol 超文字傳輸協議 的簡寫,是tcp ip協議的乙個應用層協議,用於定義web遊覽器和web伺服器之間交換資料的過程,由請求和響應構成,是乙個標準的客戶端服務伺服器模型,乙個無狀態的協議 2 http版本 http 1.0和htt...

http協議那些事

乙個 中包含http協議,當然還有其他的協議,比如上傳檔案是採用tfp協議,還有ip位址,後期我們由於ip位址不容易被記憶,所以就出現了網域名稱,還有埠 ip位址是指某一網路中,唯一的位址 埠是指,伺服器跟伺服器之間的通訊通道 當瀏覽器輸入url的時候會發生什麼 當我們在瀏覽器位址列上輸入要訪問的u...

Http之Auth的那些事

謹以此文獻給那些需要實現http auth的 程式猿 們。關於http auth的文件不多。rfc在 wiki在 使用http auth需要在server端配置http auth資訊 一般是webserver啟動的時候從配置檔案裡面讀取相關資訊 我用中文簡述一下http auth的過程 一次典型的訪...