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. JSP頁(yè)面導(dǎo)入問(wèn)題類文件放在WEB-INF / classes中的包中2. html5和Flash對(duì)抗是什么情況?3. ddos - apache日志很多其它網(wǎng)址,什么情況?4. mysql - redis和mongodb怎么結(jié)合5. 導(dǎo)入數(shù)據(jù)庫(kù)不成功6. PHP類中的$this7. mysql如何配置遠(yuǎn)程php外網(wǎng)鏈接數(shù)據(jù)庫(kù)8. nginx 504 Gateway Time-out 請(qǐng)問(wèn)如何設(shè)置9. index.php錯(cuò)誤,求指點(diǎn)10. 老師 我是一個(gè)沒(méi)有學(xué)過(guò)php語(yǔ)言的準(zhǔn)畢業(yè)生 我希望您能幫我一下
