java InputStreamReader /OutputStreamWriter 转换流

转换流:都是字节流转向字符流
InputStreamReader
OutputStreamWriter

转换流的作用:
  1. 可以把字节流转换成字符流。
  1. 可以指定任意的码表进行读写数据。

FileReader---------- 默认gbk
FileWriter ---------默认gbk

***疑问:
为什么读取数据或写入数据的时候不直接使用BufferedReader/BufferedWriter呢? ***
除了上面可以指定码表的功能外,还有一个原因就是好有的函数返回的就是字节流,或者一些第三方框架就是使用的字节流,这个是我们没有办法改变的; 当时我们在读写数据的时候又希望使用字符流,所以诞生了这个转换流

public class Demo3 {

    public static void main(String[] args) throws IOException {
//      readTest1();
//      writeTest1();
//      writeData();
        readData();
    }
    
    //指定码表读取数据
    public static void readData() throws IOException{
        FileInputStream fileInputStream = new FileInputStream("F:\\a.txt");
        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"utf-8");
        char[] buf = new char[1024];
        int length = 0 ; 
        while((length = inputStreamReader.read(buf))!=-1){
            System.out.println(new String(buf,0,length));
        }
        
        //关闭资源
        inputStreamReader.close();
    }
    
    
    //指定码表进行写数据
    public static void writeData() throws IOException{
        FileOutputStream fileOutputStream = new FileOutputStream("f:\\a.txt");  // FileWriter 默认使用的码表是gbk码表,而且不能指定码表写。
        OutputStreamWriter fileWriter = new OutputStreamWriter(fileOutputStream, "utf-8");
        fileWriter.write("中国");
        fileWriter.close();
    }
    

    //把输出字节流转换成输出字符流
    public static void  writeTest1() throws IOException{
        FileOutputStream fileOutputStream = new FileOutputStream("f:\\a.txt");
        String data = "hello world";
        //需求:要把输出字节流转换成输出字符流.          //字节流向文件输出数据的时候需要借助String类的getbyte功能,我想使用字符流.
        OutputStreamWriter writer  = new OutputStreamWriter(fileOutputStream);
        //写出数据
        writer.write(data);
        //关闭资源
        writer.close();
    }
    
    
    
    //把输入字节流转换成了输入字符流  -----> InputStreamReader
    public static void readTest1() throws IOException{
        //先获取标准 的输入流
        InputStream in = System.in;
        //把字节流转换成字符流
        InputStreamReader inputStreamReader = new InputStreamReader(in);
        
        //一次读取一行的功能
//      BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String line = null;
        while((line = bufferedReader.readLine())!=null){
            System.out.println(line);
        }

    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、IO流整体结构图 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称...
    慕凌峰阅读 5,083评论 0 12
  • 概述: 1、IO流:即Input Output的缩写。 2、特点:1)IO流用来处理设备间的数据传输。2)Java...
    玉圣阅读 5,004评论 0 3
  • 1 IO(二)No19 【 缓冲流:内置了缓冲区,对现有的流对象进行了封装,实现了高效的读写操作并增强了功能 ...
    征程_Journey阅读 4,037评论 0 1
  • 一、流的概念和作用。 流是一种有顺序的,有起点和终点的字节集合,是对数据传输的总成或抽象。即数据在两设备之间的传输...
    布鲁斯不吐丝阅读 13,427评论 2 95
  • 在经过一次没有准备的面试后,发现自己虽然写了两年的android代码,基础知识却忘的差不多了。这是程序员的大忌,没...
    猿来如痴阅读 8,056评论 3 10

友情链接更多精彩内容