Java的字符流被设置为一组对象,用于读取和编写文件中的内部数据。
字符流和字节流的使用非常相似,但是字符流更多用于文本文件的操作,因为他可以直接读取字符串。
要了解字符流的特定使用,您需要了解一些编码和解码知识:
代码:是将人类语言转换为二进制数据
解码:将二进制数据转换为人类语言。
因此,这是一个互动过程。当我们要在计算机上保存数据和文件时,我们必须考虑如何编码。并且不一致的编码会导致错误,从而导致文件乱七八糟。因此,编码解码应使用相同的字符集(编译表)。当前常用的代码表是:
以字符串的转换为例:
其中,作者和读者用于处理字符,而OutputStream和InputStream用于处理字节流,这是更普遍的。它们也有各种类型的幼苗来实现不同的功能。
看得到
共同1:四个抽象基类都实现了可结合的接口,并实现了Close()方法。这是因为它们全部调用系统资源(文件)除JVM以外,并且每次需要返回外部资源时。
一起2:负责输出的两个抽象基类(例如将数据写入硬盘的特定文件)已实现了可刷的接口。调用方法是将任何缓冲区的输出写入底部流。在大多数情况下,这里的基础流是将缓冲区的写入数据引用到外部资源(文件,网络)中。
作者的几个具体类别包括OutputStreamWriter,简化的流量和BufferedWriter。所有这些都实现了抽象父级写作的Writ()方法,它们可以将字符串直接输出到文件中。
OutputStreamWriter是一个包装流。他打包了一个沿线流对象,该对象允许在输出字节的基础上直接允许输出字符串的功能来促进写作代码。您可以在构造对象时指定编码字符集。
FileWriter是根据他的直接子类的OutputStreamWriter进一步封装的。不需要指定外部对象,而是直接指定文件对象以创建简化的流对象。这反映在其构造函数中。
输出流类的构造函数还需要指定输出流对象。
但是,简化的流无法指定字符集,只能用当前操作平台的默认字符集编码。
在追求大型文件读取和写作速度时,Writer还具有一个子类BufferDriter缓冲液流,带有一个默认大小为16KB的缓冲区,您可以在创建对象时指定缓冲区的大小。缓冲区具有其自己的newLine。()方法,可以将其写入文件以更改为适应系统。
读者的几个特定子类包括InputStreamReader,简化的流(BufferedReader)。它们都意识到了抽象父级读取器的read()方法,可以单个字符读取或一次读取字符数组。
InputStreamReader是一个包装流,与另一个负责特定函数的转换流的负责人相同。,当构造结构时,需要传递一个输入式对象。
FILEREADER是根据转换流的进一步封装的,这是他的直接子类别。构造时指定文件对象。
带有缓冲区的BuffereRead,适用于大型文件读写,可以指定缓冲区的大小,具有其自己的唯一readline()method.escece.sesce.sesce,如果您读取文件的末尾,返回null。
应该注意的是,缓冲流也是包装流。当结构时,我们需要将读者对象作为基础流传递。这是将其直接传递到FileReader对象的最简单方法!
原始:https://juejin.cn/post/7102797053155082248