目录
转换流概述
特点
- 其是字符流和字节流之间的桥梁
- 可对读取到的字节数据经过指定编码转换成字符
- 可对读取到的字符数据经过指定编码转换成字节
字符流和字节流的区别是什么?
字符流=字节流+编码集,
在实际读取的时候其实字符流还是按照字节来读取,但是会根据编码集进行查找编码集字典解析相应的字节,使得一次读取出一个字符。
转换流的具体对象
- inputStreamReader :字节数组转换成字符串。
- OutputStreamWriter:字符串转换成字节数组。
InputStreamReader 字节数组转换成字符串
继承关系
java.lang.Object
java.io.Reader
java.io.InputStreamReader
InputStreamReader 继承自Reader ,它本质上是一个字符流,所以可以作为转换流的参数来提高传输效率。
构造方法
方法 | 功能 |
InputStreamReader(InputStream in) | 创建一个使用默认字符集的 InputStreamReader。 |
InputStreamReader(InputStream in, Charset cs) | 创建使用给定字符集的 InputStreamReader。 |
InputStreamReader(InputStream in, CharsetDecoder dec) | 创建使用给定字符集解码器的 InputStreamReader |
InputStreamReader(InputStream in, String charsetName) | 创建使用指定字符集的 InputStreamReader。 |
示例
/**
* 字节流转化为字符流
* 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(OutputStream out) | 创建使用默认字符编码的 OutputStreamWriter。。 |
OutputStreamWriter(OutputStream out, Charset cs) | 创建使用给定字符集的 OutputStreamWriter。 |
OutputStreamWriter(OutputStream out, CharsetEncoder enc) | 创建使用给定字符集编码器的 OutputStreamWriter。 |
OutputStreamWriter(OutputStream out, String charsetName) | 创建使用指定字符集的 OutputStreamWriter |
示例
/**
* 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();
}
}