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. android glide asbitmap 在baseadpter中的问题2. 如何解决docker宿主机无法访问容器中的服务?3. angular.js - angularjs scope.$watch取不到input变化的值4. 在windows下安装docker Toolbox 启动Docker Quickstart Terminal 失败!5. 如何解决Centos下Docker服务启动无响应,且输入docker命令无响应?6. javascript - Android 的 webview 中怎么监听 url 的 hash 变化7. docker网络端口映射,没有方便点的操作方法么?8. mysql - 仅仅只是把单引号与反斜杠转义不用prepare statement能否避免sql注入?9. java - 为什么第一个线程已经释放了锁,第二个线程却不行?10. javascript - canvas压缩图片的原理是什么

网公网安备