【Java I/O 流】字符输入输出流:Reader 和 Writer

简介: 前面我们已经学会了字节流的使用,本篇开始介绍字符流。字符输入输出流是所有字符流的超类,学会了它们的方法,也基本上掌握了其子类的使用了。

在这里插入图片描述

❤️ 个人主页:水滴技术
🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬
🌸 订阅专栏:Java 教程:从入门到精通

大家好,我是水滴~~

前面我们已经学会了字节流的使用,本篇开始介绍字符流。字符输入输出流是所有字符流的超类,学会了它们的方法,也基本上掌握了其子类的使用了。

字符和字节的区别

  • 字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,一个字节等于八位比特(Bit)。
  • 字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。一般情况下一个英文字母或字符占用一个字节,一个汉字占用两个字节(具体占用字节数与字符集相关)。

字符集(Character Set)是多个字符的集合,字符集种类较多,每个字符集占用的字符个数不同。下面是一些常见的字符集:

  • ASCII:一个字符占用一个字节。
  • UTF-8:一个英文字符占用一个字节,一个中文字符占用三个字节。
  • GBK:一个英文字符占用一个字节,一个中文字符占用两个字节。
  • Unicode:一个英文字符占用一个字节,一个中文字符占用两个字节。

Reader(字符输入流)

java.io.Reader 抽象类是所有字符输入流的超类。其子类必须实现read(char cbuf[], int off, int len)close() 方法。为了提高效率和额外的功能,大多数子类重写了该类中的一些方法。

常用方法

int read()

从流中读取一个字符。该方法会阻塞,直到字符可用、发生 I/O 异常或达到流的结尾。
返回值:该方法将读取的内容以 0 至 65535(0x00 - 0xffff) 范围内的整数返回,如果到达流的末尾,则为 -1。

int read(char cbuf[])

从流中读取多个字符,并存入缓冲区数组 cbuf 中。该方法会阻塞,直到字符可用、发生 I/O 异常或达到流的结尾。
返回值:读取的字符数。如果已经到达流的结尾,则为 -1。

int read(char cbuf[], int off, int len)

从流中读取多个字符,并存入缓冲区数组 cbuf 一部分,从缓冲区的 off 下标处开始存储,最多存入 len 个字符。
返回值:读取的字符数。如果已经到达流的结尾,则为 -1。

void close()

关闭该输入流,并释放与之相关的所有系统资源。

Writer(字符输出流)

java.io.Writer 抽象类是所有字符输出流的超类。其子类必须实现 write(char cbuf[], int off, int len)close() 方法。为了提高效率和额外的功能,大多数子类重写了该类中的一些方法。

常用方法

void write(int c)

向输出流写入一个字符。

void write(char cbuf[])

向输出流写入一个字符数组。

void write(char cbuf[], int off, int len)

向输出流写入数组的一部分。从数组 cbuf 的下标 off 处开始,最多写入 len 个字符。

void write(String str)

向输出流写入一个字符串。

void write(String str, int off, int len)

向输出流写入字符串的一部分。

void flush()

刷新该输出流,强制将缓存区中的字符写出去。

void close()

关闭该输出流,并释放与之相关的所有系统资源。


系列文章

在这里插入图片描述

相关文章
|
2月前
|
Java
Java——编码GBK的不可映射字符
Java——编码GBK的不可映射字符
34 1
|
3月前
|
存储 缓存 Oracle
可能是最漂亮的Java I/O流详解
大家有什么思路吗?评论区一起讨论讨论。我需要使用 Java 逐行读取大约 5-6 GB 的大型文本文件。我怎样才能快速完成此操作?最高赞的回答是叫Peter Lawrey的老哥回答的。大家好,我是南哥。一个Java学习与进阶的领路人,今天指南的是Java I/O流,跟着南哥我们一起在Java之路上成长。本文收录在我开源的《Java学习进阶指南》中,涵盖了想要学习Java、成为更好的Java选手都在偷偷看的核心知识、面试重点。
100 1
可能是最漂亮的Java I/O流详解
|
2月前
|
存储 Java Apache
|
3月前
|
Java Linux
Java演进问题之1:1线程模型对于I/O密集型任务如何解决
Java演进问题之1:1线程模型对于I/O密集型任务如何解决
|
3月前
|
Java API 开发者
Java中的文件I/O操作详解
Java中的文件I/O操作详解
|
3月前
|
Java API 索引
Java中的字符串与字符操作详解
Java中的字符串与字符操作详解
|
4月前
|
Java
JAVA工具类匹配重复或者连续的字符和符号
JAVA工具类匹配重复或者连续的字符和符号
|
3月前
|
Java 数据库
Java面试题:请解释Java中的输入输出(I/O)流?详细说明应用场景
Java面试题:请解释Java中的输入输出(I/O)流?详细说明应用场景
26 0
|
3月前
|
Java API 索引
Java中的字符串与字符操作详解
Java中的字符串与字符操作详解
下一篇
无影云桌面