在字符流——Write和Reader中,最后我们发现其实字符流最终还是转化为字节流,进行对文件的操作的,它借助的就是InputStreamReader和OutputStreamWriter。
InputStreamRead和OutputStreamWriter又称转化流,可以将一个字节流转换为字符流,也可以将一个字符流转换为字节流。
InputStreamReader:可以将输入的字节流转换为转换为字符流的输入形式
OuputSteamWriter:可以将输入的字符流转换为字节流的输出形式
其实上述两种情况说出来比较不好理解,其实这是站在流的方向上进行描述的,接来下我们以例子为例,先来看一看InputStreamReader
public class ChangeStreamDemo {
public static void main(String[] args) {
try {
InputStream is = new FileInputStream(new File("F:/demo/test.txt"));
read(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
private static void read(InputStream is){
Reader reader = new InputStreamReader(is, Charset.forName("UTF-8"));
StringBuilder sb = new StringBuilder();
char[] chars = new char[1024];
int len = -1;
try {
while ((len = reader.read(chars)) != -1){
sb.append(new String(chars, 0, len));
}
reader.close();
System.out.println(sb.toString());;
} catch (IOException e) {
e.printStackTrace();
}
}
}
InputStreamReader将输入的字节流转换为转换为字符流的输入形式,就是上述代码的意思,即我们读取文件时是以字节流的形式,但是真正操作时,我们是将其转换为字符流的形式输入内存之中的。
然后我们再来看一下OutputStreamWriter,如下:
public class ChangeStreamDemo {
public static void main(String[] args) {
try {
OutputStream os = new FileOutputStream(new File("F:/demo/test.txt"));
write(os);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
private static void write(OutputStream os){
try {
Writer writer = new OutputStreamWriter(os, Charset.defaultCharset());
writer.write("你好,世界");
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
OuputSteamWriter是将输入的字符流转换为字节流的输出形式,就是我们在写入文件时操作的是字符流,但是真正写入程序的使用的是字节流。
其实从代码的角度来说,都是把字节流转化为字符流来进行操作的
来源:CSDN
作者:kami0107
链接:https://blog.csdn.net/newbie0107/article/details/103866051