Java中I/O流讀取數(shù)據(jù)不完整的問(wèn)題解決
一·問(wèn)題描述:
1.利用Java的轉(zhuǎn)換流去讀取一個(gè)json文件數(shù)據(jù),獲取的數(shù)據(jù)無(wú)法被解析為json格式數(shù)據(jù)(格式總是報(bào)錯(cuò)),且獲取的數(shù)據(jù)末尾缺少一部分?jǐn)?shù)據(jù)。
(1)Java源代碼如圖
(2)原json文件如圖
(3)解析獲取的數(shù)據(jù)如圖:轉(zhuǎn)換為json格式數(shù)據(jù)報(bào)錯(cuò)
二·問(wèn)題原因:
1.最后一次緩存數(shù)組里面的數(shù)據(jù),沒(méi)有拼接到最終字符串?dāng)?shù)據(jù)里面 2.stringBuffer.append(buffer)拼接數(shù)據(jù)的方法,內(nèi)部可能會(huì)加點(diǎn)空格之類的什么數(shù)據(jù),結(jié)果導(dǎo)致獲取的數(shù)據(jù)不完整,但數(shù)據(jù)長(zhǎng)度卻比原文件數(shù)據(jù)長(zhǎng)。
三·解決辦法:
1.由于輸入流沒(méi)有flush方法,因此不能通過(guò)刷新解決,但是可以通過(guò)改變拼接最終數(shù)據(jù)的方法解決。
具體操作如下所示:
(1)若緩存數(shù)組為:字符數(shù)組
將原拼接數(shù)據(jù)形式: stringBuffer.append(buffer);
更改為這種拼接數(shù)據(jù)形式(推薦): stringBuffer.append(buffer,0,length);
(2)若緩存數(shù)組為:字節(jié)數(shù)組
將原轉(zhuǎn)換數(shù)據(jù)形式: String str = new String(cbuf);
更改為這種拼接數(shù)據(jù)形式(推薦): String str = new String(cbuf,0,len);
(3)若是利用輸出流輸出數(shù)據(jù),也建議使用這種風(fēng)格。
例如:outputStreamWriter.write(cbuf,0,len);
最終Java源代碼如圖所示:結(jié)果與原json數(shù)據(jù)長(zhǎng)度差一位,基本完全一致
四·測(cè)試結(jié)果:成功
1.將獲取的數(shù)據(jù)進(jìn)行json格式解析,結(jié)果json格式解析正確且文件末尾數(shù)據(jù)完整,同時(shí)與原json數(shù)據(jù)長(zhǎng)度差一位,基本完全一致。(差的那一位可能是空格)
到此這篇關(guān)于Java中I/O流讀取數(shù)據(jù)不完整的問(wèn)題解決的文章就介紹到這了,更多相關(guān)Java I/O流讀取數(shù)據(jù)不完整 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springmvc+ajax+formdata上傳圖片代碼實(shí)例
這篇文章主要介紹了springmvc+ajax+formdata上傳圖片代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09JAVA 數(shù)據(jù)結(jié)構(gòu)鏈表操作循環(huán)鏈表
這篇文章主要介紹了JAVA 數(shù)據(jù)結(jié)構(gòu)鏈表操作循環(huán)鏈表的相關(guān)資料,需要的朋友可以參考下2016-10-10Springboot使用redis實(shí)現(xiàn)接口Api限流的示例代碼
本文主要介紹了Springboot使用redis實(shí)現(xiàn)接口Api限流的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07kafka并發(fā)寫(xiě)大消息異常TimeoutException排查記錄
這篇文章主要為大家介紹了kafka并發(fā)寫(xiě)大消息異常TimeoutException的排查記錄及解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02Spring?Boot深入學(xué)習(xí)數(shù)據(jù)訪問(wèn)之Spring?Data?JPA與Hibernate的應(yīng)用
Spring?Data?JPA是Spring?Data的子項(xiàng)目,在使用Spring?Data?JPA之前,先了解一下Hibernate,因?yàn)镾pring?Data?JPA是由Hibernate默認(rèn)實(shí)現(xiàn)的2022-10-10springboot如何配置上傳文件的maxRequestSize
這篇文章主要介紹了springboot如何配置上傳文件的maxRequestSize,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Spring-AOP @AspectJ切點(diǎn)函數(shù)之@annotation()用法
這篇文章主要介紹了Spring-AOP @AspectJ切點(diǎn)函數(shù)之@annotation()用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07關(guān)于@OnetoMany關(guān)系映射的排序問(wèn)題,使用注解@OrderBy
這篇文章主要介紹了關(guān)于@OnetoMany關(guān)系映射的排序問(wèn)題,使用注解@OrderBy,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12