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