Reader和Writer
1.1 知识能力
Reader/Writer处理的是字符类型的数据的流,与InputStream/OutputStream不同在于其处理流的方式是以字符为单位进行的。
Reader/Writer与InputStream/OutputStream相同,也分为节点流(低级流)和处理流(高级流)。
Reader:
Reader与InputStream相同,用于从流中读取数据。它和InputStream的区别在于InputStream是以字节为单位操作流,而Reader是以字符为单位操作流。
在Reader中定义了很多的方法用于处理字符流,下面列出了一些比较常用的方法。
(1)读取方法。
int read():用于从流中读出一个字符,并将其返回。
int read(char[] buffer):将从流中读出的字符放到字符数组buffer中,返回读出的字符数。
int read(char[] buffer,int offset,int length):将读出的字符放到字符数组的指定offset开始的空间,每次最多读出length个字符。
(2)其他方法。
void close():关闭Reader流,在使用完Reader流后,一定记得将其关闭。
boolean ready():判断流是否已经准备好被读取。
skip(long n):跳过指定的n个字符。
boolean markSupported():与InputStream中的markSupported()方法类似。
void mark(int readAheadLimit):和InputStream中的mark()方法类似。
void reset():和InputStream中的reset()方法类似。
同样的,根据流处理的是设备还是其他的流,也可以将Reader分为低级流和高级流。
●低级Reader类
CharArrayReader:与ByteArrayInputStream类似,只是在该类中处理的是字符数组。
StringReader:用于读取数据源是一个字符串的流。
PipedReader:与PipedInputStream类似,区别在于它处理的是字符。
FileReader:用于读取一个字符文件的类。
●高级Reader类
BufferedReader:与BufferedInputStream类似,它处理的是字符。
InputStreamReader:它是字节流和字符流之间的桥梁,读出字节并且将其按照指定的编码方式转换成字符。
LineNumberReader:它可以逐行地读取数据。
Reader和其派生类之间的层次关系如下图所示。
图Reader和其派生类之间的层次关系
Writer:
Writer与OutputStream类似,用于向流中写入数据。它们之间的区别在于Writer
写入的是字符,而OutputStream写入的是字节。下面来看Writer中定义的一些方法。
(1)写入方法。
void write(int c):将参数c的低16位组成字符写入流中。
void write(char[] buffer):将字符数组buffer中的字符写入流中。
void write(char[] buffer, int offset, int length):将字符数组buffer中从offset开始的length个字符写入流中。
void write(String string):将string字符串写入流中。
void write(String string, int offset, int length):将字符string中从offset开始的length 个字符写入流中。
(2)其他方法。
void close():与OutputStream的close()方法类似。
void flush():与OutputStream的flush()方法类似。
同样的,根据Writer操作的对象,将其分为低级Writer和高级Writer。低级Writer 操纵的是设备,而高级Writer操纵的是其他的流。
●低级Writer类
CharArrayWriter:对应于ByteArrayOutputStream,它实现了一个字符类型的缓冲。
StringWriter:以字符串缓冲的形式收集字符,注意这个流不能被关闭,即调用close()方法后,还可以对它调用其他的方法而不会出现异常。
PipedWriter:与PipedOutputStream类似。
FileWriter:用于向字符文件输入字符内容的一个类,如果指定字符文件不存在,它可能会创建一个新的文件,这需要视不同的平台而确定。
●高级Writer类
BufferedWriter:与BufferedOutputStream类似。
OutputStreamWriter:它是字符流到字节流之间的桥梁,写入的字符串将根据特定的编码方式转换成字节。
PrintWriter:它将流转换成文本。
Writer类和其派生类之间的关系如下图所示。
图Writer类和其派生类之间的关系
1.2 职业素质
掌握字符流Reader和Writer,可以优化输入输出,使得输入输出更安全准确。使用字符流可以避免出现读取或写入半个汉字的问题。
1.3 开发流程
第一步:建立输入输出流;
CharArrayWriter outStream = new CharArrayWriter();
CharArrayReader inStream;
inStream = new CharArray());
pipedinputstream
第二步:将信息写入文件,将信息从文件中读出;
for (int i = 0; i < s.length(); ++i)
outStream.write(s.charAt(i));
int ch = 0;
StringBuffer sb = new StringBuffer("");
while ((ch = ad()) != -1)
1.4 项目拓展
掌握Reader和writer,可以更安全高效地读写文件,为大量的信息输入输出提供保障。Reader和writer属于字符流,可以同之前学习的字节流进行比较,有兴趣的读者可以自行分析。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。