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