JAVA中InputStreamReader、OutputStr
2020-07-13 本文已影响0人
代码阿强
简介
InputStreamReader用于把字节流转换成字符流,OutputStreamWriter用于把字符流转换成字节流
InputStreamReader
我们先来看看介绍
image.png
这段话的大概意思是说,该类是由字节流通往字符流的桥梁,它能够根据编码表将字节读取并解析成字符。并且还可以自己设置编码表,如果不设置就是用系统默认的。
image.png
由JDK文档可以看到,该类是Reader的子类
同理我们可以盲猜都可以知道对应OutputStreamWriter,它应该是字符流通往字节流的桥梁,它应该是Writer的子类
事实上,确实如此
案例
我们知道System.in拿到的是一个字节流对象,也就是我们的输入其实字节流,同理,System.out的输出也是字节流,我们输入一个字节流,输出一个字节流
import java.io.*;
public class IOMain {
public static void main(String[] args) throws Exception{
Test();
}
public static void Test() {
InputStream is=System.in;
OutputStream os=System.out;
InputStreamReader isr=new InputStreamReader(is);//输入流,把字符流变成字节流
OutputStreamWriter osw=new OutputStreamWriter(os);//输出流,字节流变成字符流
BufferedReader br=new BufferedReader(isr);
BufferedWriter bw=new BufferedWriter(osw);
String line=null;
try {
while((line=br.readLine())!=null)
{
if("over".equals(line))
break;
bw.write(line);
bw.newLine();
bw.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
try {
isr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
osw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void ISReaderTest() {
InputStreamReader isr=null;
OutputStreamWriter osw=null;
try {
isr=new InputStreamReader(new FileInputStream("C:\\Users\\Administrator\\Desktop\\IO\\Test.txt"));
osw=new OutputStreamWriter(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\IO\\Test.txt"));
String str1="I love you1~!\r\n";
osw.write(str1);
String str2="I love you2~!\r\n";
osw.write(str2);
String str3="I love you3~!\r\n";
osw.write(str3);
String str4="I love you4~!\r\n";
osw.write(str4);
osw.flush();
int len=0;
char[] ch=null;
while((len=isr.read(ch))!=-1)
{
System.out.println(ch);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
{
try {
isr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
osw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}