java - inputstream流讀到最后為什么沒(méi)有返回 -1 ?
問(wèn)題描述
InputStream fileSource = req.getInputStream();String tempFile = '/home/joy/桌面/tempFile';FileOutputStream tempFileOutputStream = new FileOutputStream(tempFile);byte[] bytes = new byte[10 * 1024];int i = 0;while ((i = fileSource.read(bytes, 0, bytes.length)) != -1) { System.out.println('已讀字節(jié):' + i + ', 剩余字節(jié): ' + fileSource.available()); System.out.println(new String(bytes)); tempFileOutputStream.write(bytes); tempFileOutputStream.flush(); if (fileSource.available() < bytes.length) {bytes = new byte[fileSource.available()]; }}tempFileOutputStream.close();fileSource.close();
為什么該流讀完的時(shí)候并沒(méi)有返回-1,而是返回0,導(dǎo)致無(wú)限循環(huán).(上傳文檔類型文件不會(huì),字節(jié)文件就會(huì)發(fā)生這種情況)
問(wèn)題解答
回答1:應(yīng)該是你最后對(duì)buffer的處理導(dǎo)致剛剛好讀取完文件吧
if (fileSource.available() < bytes.length) { bytes = new byte[fileSource.available()];}
一般情況下不需要重設(shè)buffer的大小
相關(guān)文章:
1. 如何解決docker宿主機(jī)無(wú)法訪問(wèn)容器中的服務(wù)?2. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個(gè)是怎么回事????3. javascript - 請(qǐng)指條明路,angular的$event,在select中卻是undefined?4. 如何修改vim插件vimwiki中Vimwiki2HTML的一些細(xì)節(jié)5. javascript - JS事件委托問(wèn)題6. javascript - 關(guān)于jquery的remove()方法7. JavaScript中怎么理解=、==和===8. java - Spring事務(wù)回滾問(wèn)題9. javascript - vue.js如何遞歸渲染組件.10. mongodb - Mongo java驅(qū)動(dòng)中,有沒(méi)有封裝好的函數(shù),可以直接取到文檔中的某個(gè)具體的值,而不是一個(gè)文檔?或者有沒(méi)有方法實(shí)現(xiàn)??
