java - inputstream流讀到最后為什么沒有返回 -1 ?
問題描述
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('已讀字節:' + i + ', 剩余字節: ' + 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();
為什么該流讀完的時候并沒有返回-1,而是返回0,導致無限循環.(上傳文檔類型文件不會,字節文件就會發生這種情況)
問題解答
回答1:應該是你最后對buffer的處理導致剛剛好讀取完文件吧
if (fileSource.available() < bytes.length) { bytes = new byte[fileSource.available()];}
一般情況下不需要重設buffer的大小
相關文章:
1. python - linux怎么在每天的凌晨2點執行一次這個log.py文件2. 關于mysql聯合查詢一對多的顯示結果問題3. 實現bing搜索工具urlAPI提交4. MySQL主鍵沖突時的更新操作和替換操作在功能上有什么差別(如圖)5. 數據庫 - Mysql的存儲過程真的是個坑!求助下面的存儲過程哪里錯啦,實在是找不到哪里的問題了。6. windows誤人子弟啊7. mysql優化 - MySQL如何為配置表建立索引?8. 如何用筆記本上的apache做微信開發的服務器9. 我在網址中輸入localhost/abc.php顯示的是not found是為什么呢?10. 冒昧問一下,我這php代碼哪里出錯了???
