Java--转换流(处理流)

转换流的使用

举个例子说明:当我们的文件里面含有中文英文数字是,我们使用字节流将文件内容在内存中显示,英文和数字显示正常,而中文却却显示乱码。
这时候我们可以使用转换流将其转化为字符流显示在内存中。

1,处理流:转换流的使用

2,转换流:属于字符流

  • InputStreamReader:将一个字节的输入流转换成子字符的输入流
  • OutputStreamWriter:将一个字节的输出流转换成子字符的输出流

3, 作用:提供字节流与字符流之间的转换

  • 解码:字节,字节数组–》字符,字符数组
  • 编码:字符,字符数组–》字节,字节数组

4,字符集的使用

	@Test
    public void test1(){
        InputStreamReader isr= null;
        try {
            FileInputStream fis=new FileInputStream(new File("hello_gbk.txt"));

            //InputStreamReader sr=new InputStreamReader(fis);//使用系统默认的字符集
            //参数二指明字符集具体使用哪个字符集取决于文件.txt保存时使用哪个字符集
            isr = new InputStreamReader(fis,"utf-8);

            char[] cbuf=new char[1024];
            int len;
            while((len=isr.read(cbuf))!=-1){
                for(int i=0;i<len;i++) {
                    System.out.print(cbuf[i]);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (isr!=null)
                    isr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

因为转换流是处理流,所以它作用于原有的流上。

字符集:utf-8,gbk…
当一个文本文件时以utf-8字符集存储时,我们使用gbk字符集去转换会查看到乱码,所以要清楚看查看文本内容,要转换为文件保存时使用的字符集


接下来,我们使用InputStreamReaderOutputStreamWriter将一个文本文件(使用的是utf-8的字符集),复制成一个使用gbk字符的的文本文件:


    /**
     * 综合使用InputStreamReader和OutputStreamWriter
     */
    @Test
    public void tesr2(){

        InputStreamReader isr= null;
        OutputStreamWriter osw= null;
        try {
            File file1=new File("hello.txt");
            File file2=new File("hello_gbk.txt");

            FileInputStream fis=new FileInputStream(file1);
            FileOutputStream fos=new FileOutputStream(file2);

            isr = new InputStreamReader(fis);
            osw = new OutputStreamWriter(fos,"gbk");

            char[] cbuf=new char[1024];
            int len;
            while((len=isr.read(cbuf))!=-1){
                for(int i=0;i<len;i++) {
                    osw.write(cbuf[i]);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(isr!=null)
                    isr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if(osw!=null)
                    osw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

InputStreamReader是读入操作,所以要使用读入文本文件相对应的字符集。
OutputStreamWriter是写入操作,所以第二参数是要使用的字符集去写入一个文本文件。

发布了49 篇原创文章 · 获赞 0 · 访问量 1430

猜你喜欢

转载自blog.csdn.net/qq_43616001/article/details/104009308