Java中io流的学习(四)InputStreamReader和OutputStreamWriter

InputStreamReader(字符输入转换流)继承于Reader,OutputStreamWriter(字符输出转换流)继承于Writer。它们是字节流和字符流之间的“桥梁”。我们只需要记住,当要操作字节和字符串时,用着两个当纽带来操作。

有些人学过FileReader和FileWriter可能就有点懵了,因为感觉都是字符啥的,为啥搞这么麻烦。这样来说吧,一个字节是8位,而一个字符在GBK编码下占2个字节,即16位,在UTF-8编码下占三个字节,即24位。InputStreamReader和OutputStreamWriter作用于字节,而FileReader和FileWriter作用于字符,显然两者直接作用有差别的。

这两者的常用方法是:read(),读取单个字符;read(char[] cbuf,int off,int len),将字符读入数组中的某一部分;write(int c),写入单个字符;write(char[] cbuf,int off,int len),写入字符数组的某一部分;write(String str,int off,int len),写入字符串的某一部分;close()关闭该流。

下面我们通过实例代码来对其进行学习:

①进行文件的拷贝

	@Test
	public void t1() throws Exception{
		InputStreamReader isr = new InputStreamReader(new FileInputStream("H:\\javaio\\copy01.txt"));
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("H:\\javaio\\copy02.txt"));
		char[] cbuf = new char[1024];
		int len;
		while((len = isr.read(cbuf)) != -1){
			osw.write(cbuf, 0, len);
		}
		osw.close();
		isr.close();
	}

②向文件写入数据,并设置写入编码的格式

	@Test
	public void t2() throws Exception{
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("H:\\javaio\\test.txt"),"GBK");
		osw.write("我是测试用例!");
		osw.close();
	}

 ③读取文件

	@Test
	public void t3() throws Exception{
		InputStreamReader isr = new InputStreamReader(new FileInputStream("H:\\javaio\\test.txt"),"GBK");
		char[] cbuf = new char[1024];
		int len;
		while((len = isr.read(cbuf)) != -1){
			System.out.println(new String(cbuf,0,len));
		}
		isr.close();
	}

 

Java中io流的学习(一)File:https://blog.csdn.net/qq_41061437/article/details/81672859

Java中io流的学习(二)FileInputStream和FileOutputStream:https://blog.csdn.net/qq_41061437/article/details/81742175

Java中io流的学习(三)BuffereInputStream和BuffereOutputStream:https://blog.csdn.net/qq_41061437/article/details/81743522

Java中io流的学习(四)InputStreamReader和OutputStreamWriter:https://blog.csdn.net/qq_41061437/article/details/81745300

Java中io流的学习(五)FileReader和FileWriter:https://blog.csdn.net/qq_41061437/article/details/81747105

 

Java中io流的学习(六)BufferedReader和BufferedWriter:https://blog.csdn.net/qq_41061437/article/details/81747323

Java中io流的学习(七)ObjectInputStream和ObjectOutputStream:https://blog.csdn.net/qq_41061437/article/details/81748461

Java中io流的学习(八)PrintStream和PrintWriter:https://blog.csdn.net/qq_41061437/article/details/81782770

Java中io流的学习(九)RandomAccessFile:https://blog.csdn.net/qq_41061437/article/details/81805351

Java中io流的学习(十)ByteArrayInoutStream和ByteArrayOutputStream:https://blog.csdn.net/qq_41061437/article/details/81806245

Java中io流的学习(十一)NIO:https://blog.csdn.net/qq_41061437/article/details/81809370

Java中io流的学习(总结):https://blog.csdn.net/qq_41061437/article/details/81740680

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值