转换流---字节输入流转换为字符输入流

在流转换之前,先来看看字节流和字符流有什么区别?

 最大的区别是:字节流直接与终端文件进行数据交互(读入、输出),而字符流需要将数据经过缓冲区处理才与终端文件进行数据交互。

如在使用字节输出流OutputStream输出数据时,即使最后没有关闭输出流,内容也可以正常输出,但是如果使用的是字符输出流Writer(子类FileWriter),程序最后如果没有关闭字符输出流,就表示在缓冲区处理的内容不会被强制清空,所以就不会输出数据。如果有特殊情况,字符输出流无法关闭,可以使用flush()强制清空缓冲区!

进入正题:转换流用于将底层的字节流转换为字符流供子类使用。

(1)、OutputStreamWriter:字节输出流转换为字符输出流;

类定义:public class OutputStreamWriter extends Writer;

构造方法:

public OutputStreamWriter(OutputStream out);// 创建使用默认字符集的字节输出流转换字符输出流对象

public OutputStreamWriter(OutputStream out, String charsetName) //创建指定字符集的字节输出流转换字符输出流对象

注明:默认的字符集码表使用的是UTF-8

说明:OutputStreamWriter类的构造方法接收字节输出流OutputStream对象out,而OutputStreamWriter类是Writer的子类,所以该子类的对象可以向上转型为Writer类对象,这样就表示可以将接收的字节输出流转换为字符输出流。

File f = new File("c.txt");
FileOutputStream fos = new FileOutputStream(f);
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");


(2)、InputStreamReader:字节输入流转换为字符输入流;

类定义:public class InputStreamReader extends Reader;

构造方法:

public InputStreamReader(InputStream in);// 创建使用默认字符集的字节输入流转换字符输入流对象(默认字符集UTF-8)

public InputStreamReader(InputStream in, String charsetName) ;//创建指定字符集的字节输入流转换字符输入流对象

说明:InputStreamReader类的构造方法接收字节输出流InputStream对象in,而InputStreamReader类是Reader的子类,所以该子类的对象可以向上转型为Reader类对象,这样就表示可以将接收的字节输入流转换为字符输入流。

public class Test {
   public static void main(String[] args) throws IOException {
    //1.定义输出文件路径
    File file = 
      new File("d:"+File.separator+"Demo"+File.separator+"OutputStreamWriter.txt");
     //判断目录是否存在
     if(!file.getParentFile().exists()){
        //创建文件目录
        file.getParentFile().mkdirs();
     } 
     //2.取得字节输出流
     OutputStream outputStream = new FileOutputStream(file);
     //3.将字节输出流转换为字符输出流
     OutputStreamWriter out = new OutputStreamWriter(outputStream);
     out.write("欢迎使用字节输出流转换字符输出流!");
     //4.关闭流
     out.close();
   }
}
发布了9 篇原创文章 · 获赞 0 · 访问量 1432

猜你喜欢

转载自blog.csdn.net/luqingshuai_eloong/article/details/104226573
今日推荐