主页 > 手机  > 

JavaAdv01——字节流和字符流

JavaAdv01——字节流和字符流
一、核心概念解析 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——字节流和字符流