JavaWeb流式传输速查宝典
目录
🌐 Java Web 流式传输查询总表(Browser ⇄ Server)
🔧 常用 I/O 基类与方法汇总
🧭 Web 应用中流的典型组合
⚙️ 补充:流的桥接关系(内部机制)
🚀 企业实战建议
如下是一个系统化的 Java Web 流式传输查询表——既能看出浏览器与服务器之间的数据流动方向,又能快速查到常用类和方法。下面这张表就是“流式传输速查宝典”,涵盖了字节流与字符流两大体系。
🌐 Java Web 流式传输查询总表(Browser ⇄ Server)
方向 | 流类型 | Servlet 方法 | Java 类 | 常见方法 | 用途说明 |
---|---|---|---|---|---|
浏览器 → 服务器 | 字节输入流 | req.getInputStream() | ServletInputStream (继承自 InputStream ) | read(byte[]) 、available() 、close() | 用于读取浏览器上传的二进制数据(文件、图片、视频等)。 |
浏览器 → 服务器 | 字符输入流 | req.getReader() | BufferedReader (封装 InputStreamReader ) | readLine() 、read() 、ready() 、close() | 用于读取浏览器提交的文本(JSON、表单、XML 等)。 |
服务器 → 浏览器 | 字节输出流 | resp.getOutputStream() | ServletOutputStream (继承自 OutputStream ) | write(byte[]) 、flush() 、close() | 用于向浏览器发送二进制数据(文件下载、图片返回等)。 |
服务器 → 浏览器 | 字符输出流 | resp.getWriter() | PrintWriter (封装 OutputStreamWriter ) | write(String) 、println() 、flush() 、close() | 用于返回 HTML、JSON、文本等内容给浏览器。 |
🔧 常用 I/O 基类与方法汇总
类名 | 方向 | 类型 | 常用方法 | 说明 |
---|---|---|---|---|
InputStream | 输入 | 字节流 | read() 、read(byte[]) 、close() | 所有字节输入流的基类。 |
FileInputStream | 输入 | 字节流 | 同上 | 从文件读取数据。 |
BufferedInputStream | 输入 | 字节流 | 同上 | 为输入流添加缓冲,提高性能。 |
OutputStream | 输出 | 字节流 | write() 、write(byte[]) 、flush() 、close() | 所有字节输出流的基类。 |
FileOutputStream | 输出 | 字节流 | 同上 | 写入文件。 |
BufferedOutputStream | 输出 | 字节流 | 同上 | 为输出流添加缓冲,提高性能。 |
Reader | 输入 | 字符流 | read() 、read(char[]) 、close() | 所有字符输入流的基类。 |
InputStreamReader | 输入 | 字符流 | 同上 | 将字节流转为字符流,可指定编码。 |
BufferedReader | 输入 | 字符流 | readLine() 、ready() 、close() | 可按行读取文本,提高性能。 |
Writer | 输出 | 字符流 | write() 、flush() 、close() | 所有字符输出流的基类。 |
OutputStreamWriter | 输出 | 字符流 | 同上 | 将字符流转为字节流,可指定编码。 |
BufferedWriter | 输出 | 字符流 | write() 、newLine() 、flush() 、close() | 缓冲字符输出流。 |
PrintWriter | 输出 | 字符流 | print() 、println() 、write() 、flush() 、close() | 支持打印文本、对象,常用于 Web 输出。 |
🧭 Web 应用中流的典型组合
功能场景 | 请求流 | 响应流 | 传输类型 | 说明 |
---|---|---|---|---|
上传文件 | req.getInputStream() | 无 | 字节流 | 浏览器把文件二进制内容直接上传。 |
上传 JSON 数据 | req.getReader() | 无 | 字符流 | 浏览器发送 JSON 文本。 |
下载文件 | 无 | resp.getOutputStream() | 字节流 | 服务器输出文件,浏览器提示下载。 |
输出网页 | 无 | resp.getWriter() | 字符流 | 输出 HTML 页面或纯文本响应。 |
输出 JSON | 无 | resp.getWriter() | 字符流 | 服务器返回 JSON 数据,前端 AJAX 获取。 |
⚙️ 补充:流的桥接关系(内部机制)
在 Servlet 容器中:
浏览器 <==> TCP Socket <==> InputStream / OutputStream↓ ↓Reader / Writer (封装层)
-
Reader
基于InputStreamReader
:字节 → 字符 -
Writer
基于OutputStreamWriter
:字符 → 字节 -
这些转换依赖编码集(如 UTF-8、GBK)。
🚀 企业实战建议
-
二进制用流,文本用 Writer/Reader。
-
总是设置编码:
req.setCharacterEncoding("UTF-8"); resp.setContentType("application/json;charset=UTF-8");
-
记得关闭流(可用 try-with-resources 自动管理)。
-
大文件传输使用缓冲流(如
BufferedInputStream
、BufferedOutputStream
)。 -
不要混用流类型,
getWriter()
和getOutputStream()
不能同时使用。