博客
关于我
java字节流与字符流的区别
阅读量:605 次
发布时间:2019-03-12

本文共 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编程中非常重要的技能。

    转载地址:http://ufixz.baihongyu.com/

    你可能感兴趣的文章
    Python FileDialog获取文件夹路径不是文件
    查看>>
    python filter过滤器的使用_python基础知识分享:zip()、filter函数和reduce如何使用?...
    查看>>
    python flask 请求code 400, message Bad request version
    查看>>
    Python UTC 日期时间对象的 ISO 格式不包括 Z(祖鲁语或零偏移)
    查看>>
    python valueerror object2_python遇到错误记录
    查看>>
    Python virtualenv
    查看>>
    python vue3实现大文件分段续传(断点续传)--带暂停和继续功能
    查看>>
    Python WebDriver如何打印整个页面源(html)
    查看>>
    Python WebSocket自动化测试:构建高效接口测试框架
    查看>>
    Python Web开发
    查看>>
    Python 优化提速的 8 个小技巧
    查看>>
    Python 余弦相似度与皮尔逊相关系数 计算
    查看>>
    python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
    查看>>
    python 使用filetype校验文件
    查看>>
    Python 使用flush函数将缓冲区数据立即写磁盘
    查看>>
    python 使用in判断不准确,in不好使
    查看>>
    Python 使用pandas 进行查询和统计详解
    查看>>
    Redis 配置文件redis.conf详细解释
    查看>>
    python网络爬虫(2)——scrapy框架的基础使用
    查看>>
    python 倒计时 9,8,7,。。。。。。0
    查看>>