
java字节流与字符流的区别
操作单元:字节流以 应用场景:字节流擅长处理非文本数据(如图片、音频),字符流擅长处理文本数据(如文档、源代码)。 性能与复杂度:字符流通常需要用到双字节转换(因为一个字符占两个字节),添加了一定的处理步骤。 性能优化:对于大文件或二进制数据,使用字节流的边读边写方式,减少内存占用。 字符流优化:处理文本文件时,使用字符流以提高读写效率。 缓冲流:在实际应用中,通常使用缓冲流(如 资源管理:记得通过
发布日期:2021-05-15 10:22:03
浏览次数:10
分类:精选文章
本文共 2075 字,大约阅读时间需要 6 分钟。
流是Java I/O体系中的核心概念,它是数据在程序中以流的方式进行读取和写入的载体。在现代计算机系统中,所有的数据存储和传输都以流的形式进行处理,程序需要通过输入流获取数据,通过输出流将数据保存下来。
字节流与字符流
程序中的输入输出操作都以流的形式进行,可以分为字节流和字符流两大类:
字节流:
- 使用
InputStream
和OutputStream
类完成输入输出操作。 - 操作的单元是
byte
(8位字节)。 - 典型应用:音频文件、图片、二进制数据等。
- 使用
字符流:
- 使用
Reader
和Writer
类完成输入输出操作。 - 操作的单元是
char
(16位 Unicode 字符)。 - 典型应用:文本文件、多语言支持的文件操作等。
- 使用
Java I/O 包
Java 提供了 java.io
包,包含输入输出操作的核心抽象类和具体实现类。这些类分为:
- 字节流:
InputStream
和OutputStream
,处理任意类型的二进制数据。
- 字符流:
Reader
和Writer
,处理字符或字符串数据。
字节流与字符流的区别
byte
为单位操作,字符 flow 以 char
为单位。文件操作实例
// 写操作示例public class Test11 { public static void main(String[] args) throws IOException { File f = new File("d:" + File.separator + "test.txt"); OutputStream out = new FileOutputStream(f); String str = "Hello World"; byte[] b = str.getBytes(); out.write(b); out.close(); }}// 追加写操作示例public class Test17 { public static void main(String[] args) throws IOException { File f = new File("d:" + File.separator + "test.txt"); Writer out = new FileWriter(f, true); String str = "\r\nHello World"; out.write(str); out.close(); }}
字节流读取方法
- 使用
InputStream.read()
方法可以读取单个字节。返回值为int
,其中0-255
表示有效字节,-1
表示末尾。 - pooled 使用
FileInputStream
reader 读取文件的全部字节,可以通过滑动窗口逐读,每次读取指定数量的字节。
public class Test13 { public static void main(String[] args) throws IOException { File f = new File("d:" + File.separator + "test.txt"); FileInputStream fin = new FileInputStream(f); byte[] b = new byte[f.length()]; byte temp; int len = 0; while ((temp = fin.read()) != -1) { b[len++] = temp; } fin.close(); System.out.println(new String(b)); }}
技术建议
BufferedInputStream
和 BufferedWriter
)来提升输入输出效率。close()
方法关闭输入输出流资源,以防止资源泄漏。总的来说,选择字节流还是字符流取决于具体的数据类型。在处理二进制数据(如图片、音频)时,字节流是更优选择;而在处理文本数据(如文档、代码文件)时,字符流更适合。掌握这两种流的使用方法,是Java编程中非常重要的技能。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月12日 23时20分57秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
缓冲区溢出实例(一)--Windows
2019-03-06
Python中字符串前添加r ,b, u, f前缀的含义
2019-03-06
Hadoop学习笔记—Yarn
2019-03-06
JSONPath小试牛刀之Snack3
2019-03-06
Jenkins - 部署在Tomcat容器里的Jenkins,提示“反向代理设置有误”
2019-03-06
wxWidgets源码分析(3) - 消息映射表
2019-03-06
wxWidgets源码分析(5) - 窗口管理
2019-03-06
wxWidgets源码分析(7) - 窗口尺寸
2019-03-06
wxWidgets源码分析(8) - MVC架构
2019-03-06
wxWidgets源码分析(9) - wxString
2019-03-06
[白话解析] 深入浅出熵的概念 & 决策树之ID3算法
2019-03-06
[梁山好汉说IT] 梁山好汉和抢劫银行
2019-03-06
[源码解析] 消息队列 Kombu 之 基本架构
2019-03-06
[源码分析] 消息队列 Kombu 之 启动过程
2019-03-06
[源码分析] 消息队列 Kombu 之 Consumer
2019-03-06
抉择之苦
2019-03-06
wx.NET CLI wrapper for wxWidgets
2019-03-06
ASP.NET MVC Action Filters
2019-03-06