rpc结构错误_结构性错误
rpc結(jié)構(gòu)錯(cuò)誤
團(tuán)隊(duì)成員在使用以下代碼時(shí)遇到了麻煩:
void extractData(String targetUri) { Path tempFile = createTempFilePath(); extractDataToPathAndUpload(tempFile, targetUri); cleanUp(tempFile); } void extractDataToPathAndUpload(Path tempFile, String targetUri) { try (FileOutputStream stream = createOutput(tempFile)) { // extract from db to file stream database.readTable(TABLE_1, stream); // upload the temp file to the destination uploader.upload(tempFile, targetUri); } }上面的代碼經(jīng)過編輯和簡(jiǎn)化,使您對(duì)問題有所了解。 我們有一個(gè)數(shù)據(jù)庫,一個(gè)臨時(shí)臨時(shí)文件要寫入以及一個(gè)上載過程。
問題在于上upload呼叫只是無法正常工作。 真令人沮喪!
老鷹眼的讀者可能會(huì)發(fā)現(xiàn),在進(jìn)行上upload調(diào)用時(shí),由第二個(gè)函數(shù)內(nèi)的OutputStream寫入的臨時(shí)文件尚未關(guān)閉。 那是個(gè)錯(cuò)誤,解決方法是將調(diào)用upload到try-with-resources塊之外,該塊的工作是關(guān)閉流,從而釋放文件(至少在Windows上,您不能讀取您也在寫的文件!)。
錯(cuò)誤不是那樣!
這是一個(gè)很難發(fā)現(xiàn)的錯(cuò)誤,是結(jié)構(gòu)決策的結(jié)果。 上傳調(diào)用屬于導(dǎo)出操作之外的原因不僅是為了確保流關(guān)閉,還因?yàn)樗钦麄€(gè)過程的另一個(gè)階段。 該過程應(yīng)該是:
- 創(chuàng)建臨時(shí)位置
- 導(dǎo)出到臨時(shí)位置
- 清理臨時(shí)位置
這里的縮進(jìn)反映了作用域。
上面的實(shí)現(xiàn)合并了兩個(gè)中間步驟,甚至似乎將上傳操作放在了導(dǎo)出內(nèi)部。 這是一個(gè)結(jié)構(gòu)性錯(cuò)誤。
有一個(gè)論點(diǎn)是,上面的代碼應(yīng)該被編寫為三個(gè)函數(shù),而不是兩個(gè):
- 一種功能,用于管理臨時(shí)文件,然后調(diào)用...
- 下一個(gè)調(diào)用導(dǎo)出,然后上傳的函數(shù)
- 導(dǎo)出功能
這是一個(gè)很好的例子,說明在正確使用結(jié)構(gòu)上獲得一些額外的精度會(huì)減少難于發(fā)現(xiàn)的錯(cuò)誤將我們趕走的可能性。
翻譯自: https://www.javacodegeeks.com/2019/10/the-structural-bug.html
rpc結(jié)構(gòu)錯(cuò)誤
總結(jié)
以上是生活随笔為你收集整理的rpc结构错误_结构性错误的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ai怎么剪断圆环(ai怎么裁剪圆环)
- 下一篇: jstat分析_jstat –分析