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)文章
Spring Cache + Caffeine的整合與使用示例詳解
對(duì)于一些項(xiàng)目里需要對(duì)數(shù)據(jù)庫(kù)里的某些數(shù)據(jù)一直重復(fù)請(qǐng)求的,且這些數(shù)據(jù)基本是固定的,在這種情況下,可以借助簡(jiǎn)單使用本地緩存來(lái)緩存這些數(shù)據(jù),本文介紹一下Spring Cache和Caffeine的使用,感興趣的朋友一起看看吧2023-12-12
如何從官網(wǎng)下載Hibernate jar包的方法示例
這篇文章主要介紹了如何從官網(wǎng)下載Hibernate jar包的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04
Java(基于Struts2) 分頁(yè)實(shí)現(xiàn)代碼
這篇文章介紹了Java(基于Struts2) 分頁(yè)實(shí)現(xiàn)代碼,有需要的朋友可以參考一下2013-10-10
SpringBoot自動(dòng)裝配原理詳細(xì)解析
這篇文章主要介紹了SpringBoot自動(dòng)裝配原理詳細(xì)解析,一個(gè)對(duì)象交給Spring來(lái)管理的三種方式 @Bean @Compoment @Import,2024-01-01
@Bean主要在@Configuration中,通過(guò)方法進(jìn)行注入相關(guān)的Bean,@Compoent與@Service歸為一類,在類上加注入對(duì)應(yīng)的類,需要的朋友可以參考下
Java面向?qū)ο笾畣卫O(shè)計(jì)模式詳解
這篇文章主要介紹了Java面向?qū)ο笾畣卫O(shè)計(jì)模式詳解,所謂類的單例設(shè)計(jì)模式,就是采取一定的方法保證在整個(gè)的軟件系統(tǒng)中,對(duì)某個(gè)類只能存在一個(gè)對(duì)象實(shí)例,并且該類只提供一個(gè)取得其對(duì)象實(shí)例的方法,需要的朋友可以參考下2024-01-01
java多線程數(shù)據(jù)分頁(yè)處理實(shí)例講解
在本篇內(nèi)容里小編給大家分享了一篇關(guān)于java多線程數(shù)據(jù)分頁(yè)處理實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-01-01

