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. html - 移动端radio无法选中2. javascript - webpack打包后的bundlejs文件代码不知道什么意思.3. javascript - 使用echarts做一个横向的柱状图,但是数据超出坐标轴范围了怎么办?4. 正则表达式 - python pandas的sep参数问题5. javascript - Element UI表格错行6. mysql - 这条联合sql语句哪里错了7. javascript - es6模块加载export的输出值有点没太搞明白8. javascript - 在静态页面上用load 引入的页面文件问题?9. javascript - vue-resource如何终止之前的ajax请求?10. css - 移动端 line-height安卓错位,苹果机正常用,缩放解决了,可是又出来了占位的问题
