java基础:IO流---非节点流之转换流
作者:互联网
转换流
简介
字节流是比较通用的IO流,因为所有数据在计算机中都是以字节的形式存储的,所以在很多场景下,都提供了字节流的操作实现。字符流只是适用于读写字符数据的场景,例如,如果要读取别人写给你的一部电影,那么使用字符流很显然是不合适的,但是如果是读取别人写给你的一份代码文件,使用字符流就没有问题,因为代码文件里面都是字符。这时候需要注意的是,别人写给你的文件字符的编码,要和你读出来的文件字符编码一致,否则读出的文字就可能出现乱码。
转换流,可以在把一个字节流转换为字符的同时,并指定转换的字符编码。
输出
java.io.OutputStreamWriter,可以将字节输出流转换为字符输出流,并指定编码
下面是它的部分源码
public class OutputStreamWriter extends Writer {
public OutputStreamWriter(OutputStream in) {
//使用默认编码转换
}
public OutputStreamWriter(OutputStream in, String charsetName){
//使用指定编码转换
}
}
可以看出,它的构造器参数,要求传入一个需要转换的字节输出流,和一个指定的字符编码
OutputStreamWriter本身就是一个字符输出流,因为它继承了 Writer
使用
public static void main(String[] args) {
//声明一个PrintWriter流,
PrintWriter out = null;
//声明转换流,用来包装字节流,并转换为字符流
OutputStreamWriter osw = null;
try {
//创建文件对象
File file = new File("src/Test/test5/a.txt");
//将字节流转换为字符流
osw = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");
//“包裹”转换流,增强这个字符流的功能,可以一次写出一行字符串,并自动换行
//注意,转换流同时也是一个字符流
out = new PrintWriter(osw);
//或者可以写在一起也是ok的
// out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file),"UTF-8"));
//输出到文件a.txt中
out.println("你好!");
out.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(osw != null) {
try {
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(out != null) {
out.close();
}
}
}
在a.txt文件中的输出
UTF-8编码时:
GBK编码时
输入
java.io.InputStreamReader,可以将字节输入流转换为字符输入流,并指定编码
public class InputStreamReader extends Reader {
public InputStreamReader(InputStream in) {
//使用默认编码转换
}
public InputStreamReader(InputStream in, String charsetName){
//使用指定编码转换
}
}
它的构造器参数,要求传入一个需要转换的字节输入流,和一个指定的字符编码,InputStreamReader本身就是一个字符输出流,它继承了 Reader
具体使用
public static void main(String[] args) {
//缓冲流,用来提高效率
BufferedReader in = null;
//声明转换流
InputStreamReader isr = null;
File file = new File("src/Test/test5/a.txt");
try {
//将字节流转换为字符流,并且指定读取时的编码格式
isr = new InputStreamReader(new FileInputStream(file),"GBK");
in = new BufferedReader(isr);
//写在一起,就只要关闭in的资源
// in = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
//使用流
String line = null;
while((line = in.readLine())!= null) {
//输出到控制台
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(isr != null) {
try {
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
编码格式对应正确才可以读出来,例如,如果你是用UTF-8编码写进文件的你就得用UTF-8的编码格式读取文件
标签:字符,java,字节,编码,流之,---,new,null,转换 来源: https://blog.csdn.net/lalala_dxf/article/details/121383331