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. css - transform: translateY(-50%)在360浏览器极速模式下使得文字变模糊了2. mysql优化 - mysql慢查询copying to tmp table3. nginx英文文档的WebSocket proxying部分没看太明白,麻烦推荐一点中文文章4. python - 关于matplotlib的x轴显示的问题5. android 文件File删除问题6. css - .clearfix:after中为什么设置display: table7. angular.js - 怎样在使用ng-repeat属性的标签里面监听单个事件,使其能够单个改变CSS。8. angular.js - js 点击事件onclick=“”,引号内的函数名字 可以为 变量吗9. 请教: 关于 python 反斜杠转义的疑问10. angular.js - Ionic 集成crosswalk后生成的apk在android4.4.2上安装失败???
