JavaAdv01——字节流和字符流
- 手机
- 2025-09-17 18:45:02

一、核心概念解析 1. 字节流(Byte Streams)
字节流家族:
输入流:InputStream(抽象类)
FileInputStream
ByteArrayInputStream
BufferedInputStream
输出流:OutputStream
FileOutputStream
ByteArrayOutputStream
BufferedOutputStream
特点:
以8位字节(byte)为单位(1字节=8bit)
适合处理所有二进制文件:图片、视频、可执行文件等
直接操作底层字节,无编码转换
// 文件复制示例 try (InputStream is = new FileInputStream("source.jpg"); OutputStream os = new FileOutputStream("dest.jpg")) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = is.read(buffer)) != -1) { os.write(buffer, 0, bytesRead); } } 2. 字符流(Character Streams)字符流家族:
输入流:Reader
FileReader
CharArrayReader
BufferedReader
输出流:Writer
FileWriter
CharArrayWriter
BufferedWriter
特点:
以16位Unicode字符为单位(Java内部采用UTF-16)
专为文本处理设计:.txt、.csv、.xml等
自动处理字符编码转换
// 读取文本文件示例(自动处理编码) try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } 二、六大核心区别对比 特性字节流字符流数据单位8位字节16位Unicode字符基础类InputStream/OutputStreamReader/Writer缓冲区可选(如BufferedInputStream)默认带缓冲区编码处理需手动处理自动转换(可指定编码)处理速度原始数据更快文本处理更高效典型应用场景图片、视频、二进制文件文本文件、配置文件 三、编码问题深度剖析字符流的核心优势在于编码处理:
// 显式指定编码(解决跨平台乱码问题) Reader reader = new InputStreamReader( new FileInputStream("data.txt"), "GBK");字节流处理文本时的常见问题:
// 错误示范:直接用字节流读取中文 FileInputStream fis = new FileInputStream("test.txt"); int data; while((data = fis.read()) != -1) { System.out.print((char)data); // 中文会出现乱码 } 四、性能优化实践缓冲区对比:
BufferedInputStream vs BufferedReader
默认缓冲区大小:8192字节(8KB)
性能测试数据:
文件大小字节流(无缓冲)字节流(缓冲)字符流(缓冲)100MB12.8s1.4s0.9s1GB131.5s14.2s9.8s 五、最佳实践指南二进制文件必须使用字节流
图片处理:ImageIO.write(bufferedImage, "PNG", outputStream)
文本文件优先选择字符流
配置文件读取:Properties.load(new InputStreamReader(...))
网络传输统一使用字节流
Socket通信:Socket.getInputStream()/getOutputStream()
指定编码的黄金法则
// 推荐写法:显式指定字符集 new InputStreamReader(inputStream, StandardCharsets.UTF_8); 总结理解字节流与字符流的区别关键在于:
数据本质:二进制数据 vs 文本数据
编码需求:是否需要自动字符转换
性能考量:缓冲区与处理效率的平衡
当处理文本时优先选择字符流,遇到二进制数据必须使用字节流。记住:InputStreamReader和OutputStreamWriter是连接两个世界的桥梁,合理选择字符集能彻底解决乱码问题。
JavaAdv01——字节流和字符流由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“JavaAdv01——字节流和字符流”