讲师中心 微信公众号
AI工具推荐 视频效率加速

System类提供的IO流:深入理解标准输入输出接口

老辰小哥_1712

老辰小哥_1712

发布时间:2026-08-07 12:46:19

|

471人浏览过

|

来源于php中文网

原创

System类提供三个静态流对象:System.in(InputStream类型,需包装为BufferedReader才能readLine)、System.out(PrintStream,支持格式化输出且println自动flush)、System.err(独立PrintStream,可重定向用于日志分离);三者均支持运行时重定向以解耦测试。

system类提供的io流:深入理解标准输入输出接口

System类本身不提供“接口”,它只暴露三个静态的、已初始化的流对象:System.in、System.out 和 System.err。它们是具体类型的实例,不是接口,但背后依赖 Java I/O 的接口体系(如 InputStream、OutputStream、PrintStream),属于标准流的统一入口。

System.in 是字节输入流,不是直接可用的“行读取器”

System.in 的编译时类型是 InputStream,运行时通常是 BufferedInputStream。它一次只能读取字节或字节数组,不能直接调用 readLine()——这个方法属于 BufferedReader。

要安全读取一行文本,需按顺序包装:

  • 用 InputStreamReader 将字节流转为字符流(指定编码,如 UTF-8)
  • 再套一层 BufferedReader,才能使用 readLine()

常见错误是跳过转换直接 new Scanner(System.in),虽能工作,但 Scanner 内部也做了类似封装;若需精确控制(如处理换行符、异常边界),手动组合更透明。

System.out 是 PrintStream,支持格式化输出和自动刷出

System.out 的类型是 PrintStream,继承自 FilterOutputStream。它重载了 print、println、printf 等方法,并具备两个关键特性:

  • 自动将参数转为字符串并写入底层 OutputStream(默认是控制台)
  • println 方法末尾会自动刷新缓冲区(即 flush),但 print 不一定

注意:PrintStream 的 write(byte[]) 方法不带换行,也不自动 flush;若用它输出中文,必须确保传入的是正确编码的字节数组(如 "你好".getBytes(StandardCharsets.UTF_8))。

System.err 与 System.out 并行但独立,常用于分离日志

System.err 同样是 PrintStream 类型,但操作系统会将其输出单独路由——在命令行中可被重定向到不同文件,例如:

java MyApp 2> error.log

这行命令把所有 System.err 输出存入 error.log,而 System.out 仍显示在终端。开发调试时,建议用 System.err 打印异常堆栈(如 e.printStackTrace() 默认就走 err),避免和正常业务输出混在一起。

流可以重定向,实现测试与解耦

System 提供 setIn() 和 setOut() 方法,允许在运行时替换默认流:

  • setIn(new FileInputStream("input.txt")) → 后续 Scanner(System.in) 就从文件读
  • setOut(new PrintStream(new FileOutputStream("output.txt"))) → 所有 println 都写入文件

这个能力对单元测试特别有用:无需真实键盘/屏幕,就能验证输入处理逻辑或输出内容是否符合预期。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3128

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

4809

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3769

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

446

2026.01.19

Revel框架入门与安装配置
Revel框架入门与安装配置

本专题从Revel框架环境搭建讲起,系统介绍命令行工具安装、项目创建、目录结构、配置文件及热代码重载,帮助开发者快速完成首个Go Web应用。

0

2026.10.16

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

0

2026.10.15

MySQL 忘记密码怎么办
MySQL 忘记密码怎么办

MySQL忘记密码专题汇集不同版本与系统下的root密码重置方法,覆盖MySQL 5.7、8.0、Mac、Linux及本地集成环境,并提示恢复权限与重新登录的检查步骤。

0

2026.10.15

Vue.js 中 ref 和 reactive 的区别
Vue.js 中 ref 和 reactive 的区别

Vue.js中ref和reactive的区别专题汇集两种响应式API的定义、访问方式、对象解构、侦听与性能取舍等文章,帮助结合实际状态类型选择合适写法。

0

2026.10.15

VS Code 怎么配置开发环境
VS Code 怎么配置开发环境

VS Code开发环境专题汇集编辑器安装、语言扩展、编译器、解释器、终端和调试配置文章,覆盖Java、Python、C++和PHP等常见语言的入门设置。

0

2026.10.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn