跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Java IO 基础:OutputStream 类详解

Java IO 中的 OutputStream 是所有输出流的基类,支持向文件、网络等媒介写入数据。核心操作包括 write 系列写入字节、flush 强制刷新缓冲区、close 释放资源。编写时需注意异常处理,通常配合 finally 块确保流正确关闭,防止资源泄露。

baireiraku发布于 2025/2/22更新于 2026/6/1120 浏览
Java IO 基础:OutputStream 类详解

在 Java IO 体系中,OutputStream 是所有输出流的抽象基类。常见的子类包括 BufferedOutputStream、FileOutputStream 等。通过继承这个类,开发者可以处理文件、网络连接或管道等多种数据目标媒介。

写入字节数据

OutputStream 提供了多种写入方法,最基础的是 write(int)。该方法接收一个 int 类型的参数,实际写入的是该整数的低 8 位(即一个字节)。

OutputStream output = new FileOutputStream("c:\\data\\output-text.txt");
while(hasMoreData()) {
    int data = getMoreData();
    output.write(data);
}
output.close();

这段代码演示了如何逐字节写入数据。注意,为了保持示例清晰,这里暂时省略了异常捕获逻辑。在实际开发中,IO 操作极易抛出 IOException,必须妥善处理。

除了单字节写入,OutputStream 还支持批量写入:

  • write(byte[] b): 将字节数组中的所有数据写入流。
  • write(byte[] b, int offset, int length): 从指定偏移量开始,写入指定长度的数据。

部分子类如 DataOutputStream 还扩展了更高级的写入方法,例如 writeBoolean()、writeDouble() 等,方便直接写入基本类型数据。

刷新与关闭

当数据写入流后,并不一定立即落盘。以 FileOutputStream 为例,数据可能暂存在内存缓冲区中。调用 flush() 方法可以将缓冲区内的数据强制刷新到目标媒介(磁盘、网络等),确保数据不丢失。

使用完毕后,必须调用 close() 释放资源。由于 write 方法可能抛出异常,建议将 close 操作放在 finally 块中执行,确保无论是否发生错误都能正确关闭流。

OutputStream output = null;
try {
    output = new FileOutputStream("c:\\data\\output-text.txt");
    while (hasMoreData()) {
        int data = getMoreData();
        output.write(data);
    }
} finally {
    if (output != null) {
        output.close();
    }
}

这种 try-finally 结构是保证资源安全释放的经典模式。当然,在现代 Java 版本中,也可以考虑使用 try-with-resources 语法来进一步简化代码。

目录

  1. 写入字节数据
  2. 刷新与关闭
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • SkyWalking 告警通知渠道集成:Webhook、Slack、钉钉、企业微信
  • 基于 Web Unlocker 与 n8n 的自动化资讯采集推送系统
  • 11 个实用 Python 爬虫项目实战案例汇总
  • Flutter tflite_web 在 OpenHarmony Web 组件下的 AI 推理适配方案
  • 基于 Ant Design 的前端首页 Header 组件设计
  • 无人机多模态目标检测:高多样性基准数据集与融合方法
  • MISRA-C++实战:嵌入式开发中的安全编码与合规实践
  • Java 数据结构:七大排序算法(上)
  • Spring Boot 消息队列与异步通信
  • DeepSeek 大模型开发中主流编程语言对比与选择
  • OmniSteward:基于 LLM Agent 的语音与文本智能管家系统
  • KMP 算法原理与 C++ 实现详解
  • GitHub Copilot 学生认证指南与注意事项
  • AI 编程工具选型指南:从 Copilot 到 Trae
  • 牛客 CM11:链表分割算法实战
  • LangGraph工具调用实战:手把手教你实现ReAct搜索机器人
  • Stable Diffusion WebUI 中 DeepDanbooru 动漫标签自动生成指南
  • STL 容器适配器 stack 与 queue 底层模拟及算法实战
  • 大模型与生成式 AI 的技术演进及应用思考
  • C++ STL 核心基础:迭代器、auto 与范围循环

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online