当前位置: 首页 > news >正文

细说getOutputStream()方法

getOutputStream() 是 Java Servlet API 中 HttpServletResponse 接口提供的方法。

返回一个用于向客户端(浏览器)发送二进制数据的输出流。

你可以通过这个输出流,直接将数据写入 HTTP 响应体中,比如:

  • 文件(二进制)

  • 图片、音频、视频

  • Excel、PDF、Word 等

🧱 工作原理(简化)

  1. 浏览器发送请求到服务器。

  2. 后端控制器中,调用 response.getOutputStream()

  3. 获取到一个 ServletOutputStream 实例。

  4. 开始写数据 outputStream.write(...)

  5. 当请求处理完成,Web 容器(如 Tomcat)会将写入的数据返回给客户端。

🧪 示例代码

示例 1:返回一段二进制数据

@GetMapping("/raw")
public void rawBinary(HttpServletResponse response) throws IOException {byte[] data = {1, 2, 3, 4, 5};response.setContentType("application/octet-stream");ServletOutputStream out = response.getOutputStream();out.write(data);out.flush();
}

示例 2:文件下载 

@GetMapping("/download")
public void download(HttpServletResponse response) throws IOException {response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment;filename=\"file.txt\"");try (ServletOutputStream out = response.getOutputStream()) {out.write("这是一个下载文件的内容".getBytes(StandardCharsets.UTF_8));out.flush();}
}

⚠️ 注意事项

注意点说明
字符流冲突getWriter()getOutputStream() 只能调用一个,不能混用。调用一个后再调用另一个会抛出 IllegalStateException
设置类型调用前要设置 Content-Type,否则浏览器可能无法正确识别数据类型。
刷新流使用 flush() 强制写出缓存区的数据;确保及时发送数据。
关闭流通常交给 Servlet 容器关闭,但在 try-with-resources 中用 out.close() 更保险。
大文件下载优化使用缓冲区分块写入(如 4KB),避免一次性加载大文件进入内存。

 

http://www.dtcms.com/a/184910.html

相关文章:

  • 华为云服务器:产业升级的“数字神经中枢”​
  • 磁盘损坏无法读取的深度解析与数据救援实战指南
  • 带防护的操作
  • 【React】Craco 简介
  • 从零开始开发纯血鸿蒙应用之XML解析
  • split和join的区别‌
  • 【JEECG 组件扩展】JSwitch开关组件扩展单个多选框样式
  • 优化理赔数据同步机制:从4小时延迟降至15分钟
  • Java 程序流程控制篇
  • 构建 PostGIS 与 pgRouting容器镜像:打造强大的地理空间分析
  • Qt开发经验 --- 避坑指南(13)
  • 【多模态】IMAGEBIND论文阅读
  • MCP 传输层代码分析
  • 什么是建行财资云,招行CBS,光大跨行通
  • 什么是 ANR 如何避免它
  • 电池单元和电极性能
  • 何人传来空指针-GDB调试
  • Linux文件编程——open函数
  • MySQL 数据操纵与数据库优化
  • PostGreSQL:数据表被锁无法操作
  • Spark 中RDD、Job,stage,task的关系
  • c++STL-string的使用
  • 接口的基础定义与属性约束
  • Nginx 使用 Keepalived 搭建 nginx 高可用
  • (十二)Java枚举类深度解析:从基础到高级应用
  • 数据分析预备篇---NumPy数组
  • ARP协议的工作原理
  • JavaScript学习教程,从入门到精通,jQuery Mobile 移动页面开发语法知识点及案例代码(42)
  • 【Beat Saber 节奏光剑】全身动捕直播搭建指南
  • 销售管理系统使用全攻略:从基础配置到数据分析