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

Java 字节流与字符流

核心概念

在Java I/O体系中,流(Stream)是数据传输的抽象。根据处理数据单位的不同,它们被分为两大类:

  1. 字节流:用于处理二进制数据,以字节(8位)为基本单位。

  2. 字符流:用于处理文本数据,以字符(16位Unicode)为基本单位。


1. 字节流

  • 核心抽象类:InputStream 和 OutputStream

  • 处理单位:字节(byte,8位)。

  • 用途:可以用来处理任何类型的数据,因为所有文件(图片、视频、可执行程序、文本文件等)在底层都是以字节形式存储的。

  • 特点:

    • 原始数据:它不关心数据的含义,只是原样读取和写入字节。

    • 通用性强:万能工具,什么都能处理。

    • 处理文本可能出错:如果用它来读取文本(尤其是包含多字节字符的,如中文),可能会因为编码问题导致乱码。

常见子类举例:

  • FileInputStream / FileOutputStream:用于读写文件。

  • ByteArrayInputStream / ByteArrayOutputStream:用于在内存中读写数据。

  • BufferedInputStream / BufferedOutputStream:提供缓冲功能,提高读写效率。

简单示例(读取一个文件的所有字节):

try (FileInputStream fis = new FileInputStream("image.jpg")) {int byteData;while ((byteData = fis.read()) != -1) {// 处理每一个字节 byteData
    }
} catch (IOException e) {e.printStackTrace();
}

2. 字符流

  • 核心抽象类:Reader 和 Writer

  • 处理单位:字符(char,16位)。

  • 用途:专门为处理文本数据而设计。它能自动处理字符编码(如UTF-8, GBK等),确保正确地将字节序列转换为字符,反之亦然。

  • 特点:

    • 高层抽象:它理解“字符”的概念,屏蔽了底层字节编码的复杂性。

    • 自动编码转换:在读取时,它将字节根据指定的字符集解码成字符;在写入时,它将字符编码成字节。默认使用系统的字符编码,但可以指定。

    • 处理文本更方便、安全:是处理纯文本文件的首选。

常见子类举例:

  • InputStreamReader / OutputStreamWriter:桥梁作用,可以将字节流转换为字符流,并指定字符集。

  • FileReader / FileWriter:用于读写文本文件(是InputStreamReaderFileInputStream的组合的便捷类)。

  • BufferedReader / BufferedWriter:提供缓冲功能,并且BufferedReaderreadLine()方法,可以方便地按行读取。

简单示例(按行读取一个文本文件):

try (BufferedReader br = new BufferedReader(new FileReader("text.txt"))) {String line;while ((line = br.readLine()) != null) {// 处理每一行文本 line
    }
} catch (IOException e) {e.printStackTrace();
}

核心区别与联系

特性字节流字符流
基本单位 字节(8位) 字符(16位Unicode)
处理数据类型 所有二进制数据(如图片、音频、视频等) 文本数据
核心抽象类 InputStreamOutputStream ReaderWriter
是否处理编码 否,直接操作字节 是,依赖字符编码进行转换
性能 处理非文本数据效率高 处理文本数据效率高且安全
关系 底层基础 基于字节流构建,通过InputStreamReader/OutputStreamWriter进行转换

如何选择?

  1. 处理非文本文件(如图片、压缩包、PDF):使用字节流。

  2. 处理文本文件(如.txt, .java, .html):优先使用字符流,特别是BufferedReaderBufferedWriter,因为它们能避免乱码问题,并且提供了更方便的API(如readLine)。

 
 
 
http://www.jsqmd.com/news/42266/

相关文章:

  • 基于ADMM交替方向乘子法的超大规模储备系统分布式协同优化算法收敛性matlab仿真与分析
  • 安卓助手
  • MySQL 查询优化器
  • 精读GitHub - swift-markdown-ui
  • Bash的快捷键
  • C++学习日志——蓝桥杯课程总结_基础篇/2025.11.16
  • 【Linux】curl基础语法与常用参数详解
  • Linux系统编程初步——冯诺依曼体系结构的理解
  • 2025-11-17 使用nvm下载node包失败
  • 2. 使用Gin处理HTTP请求
  • C++之复合类型(四) - Invinc
  • 20232414 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 物流管理,必须掌握的10个要点 - 智慧园区
  • 工程行业中-使用AI报价得可行性-一般(属于能应付但不精确,未测试在数据库全得情况下得效果,总体欠调教)
  • 力扣 第 476 场周赛(A~D)
  • libvte, xfce4-terminal和gnome-terminal,干货满满
  • 2025 年 11 月冷却塔厂家推荐排行榜,闭式冷却塔,方形冷却塔,工业冷却塔,全钢冷却塔,凉水塔,圆形冷却塔,玻璃钢冷却塔,防腐冷却塔,冷却水塔公司推荐
  • 寄卖业务质检1
  • [学习记录整理] ---IP地址,网关,掩码,DNS等
  • 2025 年 11 月不锈钢管件厂家权威推荐榜:欧标卡压管件,国标/薄壁/沟槽不锈钢管件,90/45弯头管件源头厂家精选
  • 3.分治算法的设计思想与分析方法
  • 2025.11.16总结
  • 2025 年 11 月冷拉/冷拔方钢厂家推荐排行榜,冷拉方钢,冷拔方钢,精密冷拉方钢,高强度冷拔方钢公司推荐
  • LeeCode_2 两数相加
  • 2025 年 11 月 CNC 高压清洗机厂家推荐排行榜,CNC全自动高压清洗机,CNC高压去毛刺清洗机,卧式/双工位CNC高压清洗机,数控高压清洗去毛刺机公司推荐
  • 2025 年 11 月 Q355B/Q345B/16Mn 冷拔扁钢厂家推荐排行榜,优质冷拔扁钢,高强度扁钢,精密扁钢公司精选
  • 2025 年 11 月 Q355B/Q345B/16Mn 冷拔圆钢厂家推荐排行榜,优质冷拔圆钢,高强度圆钢,合金结构钢圆钢公司精选
  • 移动银行安全测试的11个最佳实践
  • 2025 年 11 月冷拉/冷拔异型钢厂家推荐排行榜,精密冷拉异型钢,冷拔异型钢材,定制冷拉型钢,高强度冷拔钢公司推荐
  • 2025 年 11 月苹果仓厂家推荐排行榜,苹果仓民宿,移动房苹果仓,出口苹果仓,外贸出口苹果仓,集装箱苹果仓,景区苹果仓,苹果仓房屋,网红苹果仓,可移动式苹果仓公司推荐