(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
;
public class WriterTest {
public static void main(String
[] args
) throws IOException
{
FileOutputStream fos
= new FileOutputStream("file.txt");
OutputStreamWriter osw
= new OutputStreamWriter(fos
);
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
{
FileInputStream fis
= new FileInputStream("file.txt");
InputStreamReader isr
= new InputStreamReader(fis
);
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();
}
}