javaSE 笔记 字符流 + 字符缓冲流 + IO流小结
2021/8/30 14:06:20
本文主要是介绍javaSE 笔记 字符流 + 字符缓冲流 + IO流小结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
为什么会输出字符流
由于字节流操作中文不是特别的方便,所以java就提供字符流
字符流 = 字节流 + 编码表
用字节流复制文本文件时,文本文件也会有中文,但是没问题,因为最终底层操作会自动进行字节拼接成中文,如何识别是中文的呢?
汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数。
编码表
计算机要准确的存储和识别各种字符集符号,就需要进行字符编码,一套字符集必然至少有一套字符编码。常见的字符集有ASCII字符集,GCXXX字符集
,Unicode字符集
GBK是比较重要的支持中文编码的字符集,Unicode被称为万国码,有三种编码方案,分别是UTF-8,UTF-16,UTF-32,最常用的是UTF-8,
它使用一至四个字节为每个字符编码。
字符串中的编码解码问题
String s = "中国"; bytes[] bys = s.getBytes("UTF-8"); // [-28,-72,-83,-27,-101,-67] String ss = new String(bys,"UTF-8"); System.out.println(ss); bytes[] bys = s.getBytes("GBK"); // [-42,-48,-71,-6] String ss = new String(bys,"GBK"); System.out.println(ss);
使用何种字符集进行编码,就必须使用何种字符集进行解码
字符流中的编码解码问题
字符流抽象基类:Reader:字符输入流的抽象类 Writer:字符输出流的抽象类
字符流中编码解码问题相关的两个类:InputStreamReader,OutputStreamWriter
InputStreamReader(InputStream isr)是从字节流到字符流的桥梁,它读取字节,并使用指定的字符集将其解码为字符
InputStreamReader isr = new InputStreamReader(new FileInputStream("D://qqq.txt","UTF-8"))
OutputStreamWriter(OutputStream osw)是从字符流到字节流的桥梁,它使用指定的字符集将写入的字符编码为字节
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D://qqq.txt"),"UTF-8")
跟上面的字符串编解码问题比较,一个是在由字符数组转成字符串的时候,必须指明特定的字符集进行解码,而这边是在字节流对象转成字符流对象的时候,指明特定的字符集进行解码。
字符流写数据的5种方式
1.写一个字符,一个字符数组,一个字符数组的一部分,一个字符串,一个字符串的一部分
注意字符流写数据是没法直接写进去的,因为真正写进去还是得靠字节流,这时还在缓冲区,需要调用一次osw.flush() //刷新流,
然后注意释放资源osw.close()这个方法是先刷新后关闭的
字符流读数据的2种方式
1.//int read()一次读取一个字节
int ch; while ((ch=isr.read())!=-1){ System.out.print((char)ch) }
2.//int read(char[] cbuf),一次读取一个字符数组数据
char[] chs = new char[1024]; int len; while((len=isr.read())!=-1){ System.out.print(new String(chs,0,len)); //这边调用的是String的参数为字符数组的构造方法,前面还有参数为字节数组的构造方法 }
复制java文件改进版
因为InputStreamReader和OutputStreamWriter写起来实在太麻烦了,所以我们直接使用它的子类,FileReader和FileWriter,分别
是读取字符文件的便捷类以及写入字符文件的便捷类。但是想做字符流中的编码问题,还得使用转换流,InputStreamReader和OutputStreamWriter。
整个读写过程是这样的:一个文件要读,然后想到Reader基类,再想到字符输入流对象InputStreamReader,但是写起来太麻烦,就想使用
简单的读取字符文件的子类,FileReader。写数据的话整个心路历程也是这样的。
然后注意FileReader和FileWriter既然是转换流的子类,那么他们同样是跟转换流一样有多种读取和写入的方法的。
字符缓冲流
BufferedWriter:将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或者可以接受默认大小
,默认值足够大, 可用于大多数用途。
BufferedReader:从字符输入流读取文本,缓冲字符,其他差不多
具体操作跟字节缓冲流也没什么不同的。
字符缓冲流特有功能
BufferedWriter:
void newLine():写一行 行分隔符,行分隔符由系统属性定义
BufferedReader:
public String readLine():读一行文字。结果包含行的内容的字符串,不包括任何行终止字符。如果流的结尾已经到达,则为Null。
IO流小结:
字节流:
因为InputStream和OutputStream是抽象类,所以我们选择使用他们的子类。
字符流:
这篇关于javaSE 笔记 字符流 + 字符缓冲流 + IO流小结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南