java IO —— 转换流详解
转换流概述
特点
-
其是字符流和字节流之间的桥梁 可对读取到的字节数据经过指定编码转换成字符 可对读取到的字符数据经过指定编码转换成字节
字符流和字节流的区别是什么?
字符流=字节流+编码集,
在实际读取的时候其实字符流还是按照字节来读取,但是会根据编码集进行查找编码集字典解析相应的字节,使得一次读取出一个字符。
转换流的具体对象
-
inputStreamReader :字节数组转换成字符串。 OutputStreamWriter:字符串转换成字节数组。
InputStreamReader 字节数组转换成字符串
继承关系
java.lang.Object java.io.Reader java.io.InputStreamReader
InputStreamReader 继承自Reader ,它本质上是一个字符流,所以可以作为转换流的参数来提高传输效率。
构造方法
示例
/** * 字节流转化为字符流 * InputStreamReader * @param path */ public static void testISR(String path){ try { BufferedWriter bw = new BufferedWriter(new FileWriter(path)); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = ""; while((line = br.readLine()) != null){ bw.write(line); bw.newLine(); bw.flush(); } br.close(); bw.close(); } catch (Exception e) { e.printStackTrace(); } } //采取指定的编码读取一个文件 public static void testReader(String path,String charset){ try { BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path),charset)); String line = ""; while((line = br.readLine()) != null){ System.out.println(line); } br.close(); } catch (Exception e) { e.printStackTrace(); } } //采取指定的编码输出一个文件 public static void testWriter(String path,String charset){ try { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path),charset)); bw.write("王佳萌是个仙女"); bw.close(); } catch (Exception e) { e.printStackTrace(); } }
OutputStreamWriter 字符串转化成字节数组
继承关系
java.lang.Object java.io.Writer java.io.OutputStreamWriter
OutputStreamWriter 继承自Writer,它本质上是一个字符流,所以可以作为转换流的参数来提高传输效率。
构造方法
示例
/** * OutputStreamWriter() * @param path */ public static void testOSW(String path){ BufferedReader br = null; try { br = new BufferedReader(new FileReader(path)); //字符流-->字节流 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String line = null; while ((line = br.readLine())!=null) { bw.write(line); bw.newLine(); bw.flush(); } bw.close(); br.close(); } catch (Exception e) { e.printStackTrace(); } }
上一篇:
IDEA上Java项目控制台中文乱码