字符流,转换流

文章目录

1 字符流

字符输入流:Reader

字符输出流:Writer

具体使用方式以文件字符输入流输出流为例
文件字符输入流:FileReader
文件字符输出流:FileWriter
对应字节流学习,使用方法也类似

2文件字符流(继承自转换流,转换流继承自字符流

在这里插入图片描述
在这里插入图片描述

字符输入流FileReader

2.1 常用构造方法
1、FileReader(File file) ;指定一个File文件(一般只是用文件路径名)
2、FileReader(String fileName);指定一个文件名
2.1常用方法
1、read();读取一个字符,返回该字符的int值
2、read(char[] cbuf);读取到char数组里,一次最多读取cbuf.length()个字符,数组满了后不会清空数组,下一次读取挨个覆盖。跟inputStream的read一样
举例说明:

1.txt : abcdef

	public static void main(String[] args) throws IOException {
		FileReader fr = new FileReader(new File("1.txt"));
		FileWriter fw = new FileWriter(new File("2.txt"));
		char[] chars = new char[5];//这个数组只能存放5个字符
		int readNum = 0;
		while((readNum = fr.read(chars))!=-1) {
			//fw.write(new String(chars,0,readNum));
			fw.write(chars);
		}
		fr.close();
		fw.flush();
		fw.close();
	}

第一个数组放了5个字符:abcde,可是还有一个f没有读到,所以会读第二次,那么现在数组里放的是abcde,这是会从第一位开始覆盖,把f覆盖到a上,所以现在的数组里放的是fbcde。那么这两次一共读到的就是abcdefbcde
运行结果:
在这里插入图片描述

3、read(char[] cbuf,int off,int len);把数据读取到数组的指定位置
4、close() 关闭输入流。(注意,字符流没有字节流中的available方法,返回读取的文件的剩余字节数)

字符输出流FileWriter

2.2构造方法
1、FileWriter(File f);/FileWriter(String fileName )指定一个文件
2、FileWriter(File file,boolean append)/FileWriter(String fileName,boolean append); 如果append是true,则将字节写入文件末尾处(插入),false写入文件开始处(覆盖)
2.2常用方法
1、writer(int c);写入一个字符
2、write(char[] cbuf)/writer(char[] cbuf,int off,int len) 写入字符数组
3、write(String str)/writer(String str,int off,int len) 写入字符串
4、flush() 刷新该流的缓冲,将缓冲的数据刷新到文件中
5、close() 关闭流

3带缓冲区的字符流(继承自字符流,比字符流效率高

在这里插入图片描述
在这里插入图片描述

3.1缓冲字符输入流BufferedReader

BufferedReader(Reader r)
常用方法(与字符流基本一样)
1、特有的 readLine();读取一个文本行,返回文本的String格式

2、其他跟reader一样

3.2缓冲字符输出流BufferedWriter

BufferedWriter(Writer w)
常用方法(与字符流基本一样)
1、注意 没有write(String str),只有write(String str,int off,int len)
2、特有:newLine();写入一个行分割符

3、flush();刷新缓冲区

4 转换流(继承字符流

乱码的产生: 编码与解码使用的编码表不一致。
解决乱码:保证编码与解码使用相同的编码表。

ASCII:美国信息交换标准码
1)一个字节的,不可以支持中文。
ISO-8859-1
1)一个字节的,不可以支持中文。
GBK:
1)目前汉字使用的编码形式,由2个字节组成。
Unicode 万国码、统一码 全世界计算机统一编码。
1)Utf-8:汉字由3个字节组成。
2)Utf-16
3)Utf-32

构造方法

InputStreamReader(InputStream in, Charset cs)

将字节流按照指定的编码形式,转换成一个字符输入流。

OutputStreamWriter(OutputStream out, Charset cs)

将字节流按照指定的编码形式,转换成一个字符输出流

功能

1.可以将字节流转换成字符流
2.可以指定编码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值