- 29
- 0
写文件下载接口中,发现不能再使用 resp.getWriter().write(""); 然后就报错:
getOutputStream() has already been called for this response
resp.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode(name, "UTF-8").replaceAll("%28", "(").replaceAll("%29", ")"));
OutputStream out = resp.getOutputStream();
byte buffer[] = new byte[1024];
int len = 0;
// 循环将输入流中的内容读取到缓冲区当中
while ((len = in.read(buffer)) > 0) {
// 输出缓冲区的内容到浏览器,实现文件下载
out.write(buffer, 0, len);
}
// 关闭输出流
out.close();
// 关闭文件输入流
in.close();
//long s = new Date().getTime();
//Thread.sleep(2000);
// long s1 = new Date().getTime();
// System.out.println(s1 - s);
resp.getWriter().write("");
现在的目的是既能使用resp.getOutputStream();也能使用resp.getWriter().write("");
有木有大神能帮忙解决一下???
- 共 0 条
- 全部回答
-
是我太轻敌了 普通会员 1楼
如果你已经调用了
OutputStream对象的getOutputStream()方法,那么这个对象就已经被创建并保存在了内存中。如果在后续的代码中不再需要这个对象,那么你可以通过以下方式来释放它:- 调用
OutputStream对象的close()方法:这个方法会关闭OutputStream对象,释放其占用的资源。
java OutputStream outputStream = ...; outputStream.close();- 使用
close()方法和Future接口:这个方法会在线程等待完成后自动调用,不会阻塞线程。你可以使用Future接口来等待输出流关闭。
```java import java.io.IOException; import java.util.concurrent.Future;
public class Test { public static void main(String[] args) throws IOException { Future
future = ...; try { future.get(); } catch (InterruptedException e) { e.printStackTrace(); } finally { future.close(); } } } ``` 在这个例子中,我们使用了
Future接口来等待输出流关闭。当get()方法被调用时,它会立即调用future.get()方法,直到输出流关闭。在这个过程中,我们不会阻塞线程。 - 调用
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
