Java SE 094 Java字符流详解

tech2023-02-04  106

(1)一个人只要自己不放弃自己,整个世界也不会放弃你. (2)天生我才必有大用 (3)不能忍受学习之苦就一定要忍受生活之苦,这是多么痛苦而深刻的领悟. (4)做难事必有所得 (5)精神乃真正的刀锋 (6)战胜对手有两次,第一次在内心中. (7)编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~

Java SE 094 Java字符流详解

文章目录

Java SE 094 Java字符流详解1.字符流2.字符流Reader和Writer3.InputStreamReader和OutputStreamWriter类4.字符流输入与输出4.1将数据通过字符流写入文件4.2 通过字符流读入文件内容 5.System.out.println5.1接收用户键盘输入5.2读取源文件显示在命令行上面

1.字符流

(1)尽管字节流提供了处理任何类型输入/输出操作的足够的功能,它们不能直接操作Unicode字符。既然Java的一个主要目的是支持“只写一次,到处运行”的哲学,包括直接的字符输入/输出支持是必要的。字符流层次结构的顶层是Reader和Writer抽象类。 (2)之所以出现unicode字符是为了满足世界上多种语言,能表示世界上多种语言的字符。最早用于表示字符的编码是ASCII码,这个编码表示的英文是没问题的,但是表示东亚那些字符,汉语中文、日文,还有韩语都是表达不了的。一个Unicode字符是用两个字节表示的,如果单独的使用字节流的话,使用了unicode进行编码的字符,每次读一个字节,出来之后肯定不能够恢复到一个完整的字符,变成字符的一半了,字符的一半肯定就是乱码了,因此Java给我们提供了操纵字符的相应的功能,可以让我们以更加简单,更加方便的方式来去操纵字符串。

2.字符流Reader和Writer

(1)由于Java采用16位的Unicode字符,因此需要基于字符的输入/输出操作。从Java1.1版开始,加入了专门处理字符流的抽象类Reader和Writer,前者用于处理输入,后者用于处理输出。这两个类类似于InputStream和OutputStream,也只是提供一些处理字符流的规定,本身不能用来生成对象。 (2)Reader和Writer类也有较多的子类,与字节流类似,它们用来创建具体的字符流对象进行I/O操作。字符流的读写方法与字节流的相应方法都很类似,但读写对象使用的是字符。 (3)解说:byte数组换成char数组 (4)Reader中包含一套字符输入流需要的方法,可以完成最基本的从输入流读入数据的功能。当Java程序需要外设的数据时,可根据数据的不同形式,创建一个适当的Reader子类类型的对象来完成与该外设的连接,然后再调用执行这个流类对象的特定输入方法,如read(),来实现对相应外设的输入操作。 (5)Writer中包含一套字符输出流需要的方法,可以完成最基本的从输出数据到输出流的功能。当Java程序需要将数据输出到外设时,可根据数据的不同形式,也要创建一个适当的Writer子类类型的对象来完成与该外设的连接,然后再调用执行这个流类对象的特定输出方法,如write(),来实现对相应外设的输出操作。 (6)Reader是定义Java的流式字符输入模式的抽象类。该类的所有方法在出错情况下都将引发IOException异常。 (7)Writer是定义流式字符输出的抽象类。所有该类的方法都返回一个void值并在出错情况下引发IOException异常。

(8)Java程序语言使用Unicode来表示字符串和字符,Unicode使用两个字节来表示一个字符,即一个字符占16位。

3.InputStreamReader和OutputStreamWriter类

(1)这是java.io包中用于处理字符流的基本类,用来在字节流和字符流的基本类之间搭一座“桥”,这里的字节流的编码与具体的平台有关,可以在构造流对象时指定规范,也可以使用当前平台的缺省规范。

4.字符流输入与输出

4.1将数据通过字符流写入文件

package com.javareview.io.stream.characterstream; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; /** * 将数据通过字符流写入文件 * @author xiongjie */ public class WriterTest { public static void main(String[] args) throws IOException { //s1.构建具体构建角色 FileOutputStream fos = new FileOutputStream("file.txt"); //s2.构建具体装饰角色1 OutputStreamWriter osw = new OutputStreamWriter(fos); //s3.构建具体装饰角色2,先将内容写到缓冲区 BufferedWriter bw = new BufferedWriter(osw); bw.write("I love Liu Manlin!"); bw.write("\n"); bw.write("Liu Manlin love Xiongjie"); bw.flush(); bw.close(); } }

4.2 通过字符流读入文件内容

package com.javareview.io.stream.characterstream; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; /** * 通过字符流读入文件内容 */ public class ReaderTest { public static void main(String[] args) throws IOException { //s1.构建具体构建角色 FileInputStream fis = new FileInputStream("file.txt"); //s2.构建具体装饰角色1 InputStreamReader isr = new InputStreamReader(fis); //s3.构建具体装饰角色2 BufferedReader br = new BufferedReader(isr); System.out.println(br.readLine()); System.out.println(br.readLine()); String str = br.readLine(); while(null != str) { System.out.println(str); System.out.println(br.readLine()); } br.close(); } }

5.System.out.println

(1)out是System里面的一个成员变量,是一个标准的输出流。是PrintStream类型的,父类是一个FilterOutputStream,是一个过滤流。 (2)println()方法就是向标准输出设备上显示输出内容。对于计算机里面就是命令行。标准的输入设备就是键盘,从键盘里面去接收信息。

5.1接收用户键盘输入

package com.javareview.io.stream.characterstream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * 接收用户键盘输入 */ public class SystemOutTest { public static void main(String[] args) throws IOException { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String str ; while(null != (str = br.readLine())) { System.out.println(str); } br.close(); } }

5.2读取源文件显示在命令行上面

package com.javareview.io.stream.characterstream; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; /** * 文件内容读取 */ public class FileReaderTest { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("D:\\workspace\\javareview\\src\\com\\javareview\\io\\stream\\characterstream\\ReaderTest.java"); BufferedReader br = new BufferedReader(fr); String str; while(null != (str = br.readLine())) { System.out.println(str); } br.close(); } } r br = new BufferedReader(fr); String str; while(null != (str = br.readLine())) { System.out.println(str); } br.close(); } }
最新回复(0)