一双慧眼识别字节/字符流区别 | 带你学《Java语言高级特性》之五十七

简介: Java文件IO操作中常用的流处理类的基本信息和相关操作我们已经全部了解过,现在让我们来通过输出操作的复习总结概况字节流和字符流之间的区别吧。

上一篇:掌握字符输入流:Reader | 带你学《Java语言高级特性》之五十六
Java文件IO操作中常用的流处理类的基本信息和相关操作我们已经全部了解过,现在让我们来通过输出操作的复习总结概况字节流和字符流之间的区别吧。

【本节目标】
通过阅读本节内容,你将了解到OutputStream和Writer之间的不同,认识到输出过程中的缓冲区的存在,并能够通过对缓冲取得一些操作实现一些需求,深刻理解字符流和字节流适用于不同的使用场景。

字节流与字符流的区别

现在通过一系列的分析已经可以清楚字节流与字符流的基本操作了,但是对于这两类流依然是存在有区别的,重点来分析一下输出的处理操作。在使用OutputStream和Writer输出的最后都使用了close()方法进行了关闭处理。

在使用OutputStream类输出的时候,如果没有使用close()方法关闭输出流会发现内容依然可以实现正常的输出;但是如果在使用Writer的时候没有使用close()方法关闭输出流,那么这个时候内容将无法进行输出,因为Writer使用到了缓冲区,当使用close()方法的时候实际上会出现有强制刷新缓冲区的情况,所以这个时候会将内容进行输出,如果没有关闭,那么将无法进行输出操作,所以此时如果在不关闭的情况下想将全部的内容进行输出可以使用flush()方法强制性清空。

范例:使用Writer并强制性清空

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        File file = new File("D:"+ File.separator + "hello" + File.separator + "mldn.txt");
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();  //父目录必须存在
        }
        Writer out = new FileWriter(file);
        String str = "www.mldn.cn";
        out.write(str);
        out.flush();//强制性刷新    www.mldn.cn
    }
}

字节流在进行处理的时候并不会使用到缓冲区,而字符流会使用到缓冲区,另外使用缓冲区的字符流更加适合进行中文数据的处理,所以在日后的开发中如果要涉及到包含有中文信息的输出,一般都会使用字符流进行处理,但是从另外一方面来讲,字节流和字符流的基本处理形式是相似的,由于IO很多情况下都是进行数据的传输使用(二进制),所以我们的重点将以字节流为主。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:借助转换流打通字节/字符流的关联 | 带你学《Java语言高级特性》之五十八
更多Java面向对象编程文章查看此处

相关文章
|
6月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
252 4
|
6月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
421 18
|
7月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1198 1
|
7月前
|
存储 Java Apache
Java语言操作INI配置文件策略
以上步骤展示了基本策略,在实际项目中可能需要根据具体需求进行调整优化。例如,在多线程环境中操作同一份配置时需要考虑线程安全问题;大型项目可能还需考虑性能问题等等。
297 15
|
8月前
|
Java 测试技术
Java浮点类型详解:使用与区别
Java中的浮点类型主要包括float和double,它们在内存占用、精度范围和使用场景上有显著差异。float占用4字节,提供约6-7位有效数字;double占用8字节,提供约15-16位有效数字。float适合内存敏感或精度要求不高的场景,而double精度更高,是Java默认的浮点类型,推荐在大多数情况下使用。两者都存在精度限制,不能用于需要精确计算的金融领域。比较浮点数时应使用误差范围或BigDecimal类。科学计算和工程计算通常使用double,而金融计算应使用BigDecimal。
3108 102
|
8月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
610 0
|
8月前
|
JSON Java API
【干货满满】分享拼多多API接口到手价,用Java语言实现
本方案基于 Java 实现调用拼多多开放平台商品详情 API,通过联盟接口获取商品到手价(含拼团折扣与优惠券),包含签名生成、HTTP 请求及响应解析逻辑,适用于电商比价、导购系统集成。
|
8月前
|
JSON Java API
【干货满满】分享京东API接口到手价,用Java语言实现
本示例使用 Java 调用京东开放平台商品价格及优惠信息 API,通过商品详情和促销接口获取到手价(含优惠券、满减等),包含签名生成、HTTP 请求及响应解析逻辑,适用于比价工具、电商系统集成等场景。
|
6月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
302 2