java的流式输入输出建立在4个抽象类之上:InputStream. OutputStream, Reader, Writer,他们用来建立具体流式子类。
InputStream OutputStream被设计成字节流类,Reader, Writer被设计成字符流类。处理字符或者字符串用字符串流类,处理字节或者二进制对象用字节流类。
最长用的是System.in 和System.out,这两个都属于InputStream类型
··············字节流和字符流的转换··················
有时需要字节流和字符流之间的转换。InputStreamReader和OutputStreamWriter是用于相互转换的类,前者用于将字节流解码成字符,后者用于将写入的字符编码成字节流。为了提高效率,避免频繁进行字节字符之间的相互转换,尽量用BufferWriter类包装OutputStreamWriter类,用BufferedReader类包装InputStreamReader类
BufferedWriter out = new BufferedWriter(new OutputSteamWriter(System.out));
BufferedReader in = new BufferedReader(new inputSteamReader(System.in));
构建BufferedReader对象时,必须传递一个Reader类型的对象作为参数,而键盘对应的System.in是一个InputStream类型的对象,所以这里需要用一个InputSteamReader的转换类,将System,in转换成字符流之后,放入到字符流缓冲区之中,之后从缓冲区每次读入一行数据。