码迷,mamicode.com
首页 > 编程语言 > 详细

Java-IO流系列-转换流

时间:2021-06-28 19:36:57      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:try   fileinput   转换   put   exception   close   leo   loading   问题   

转换流

什么是转换流

转换流提供了在字节流和字符流之间的转换

Java API提供了两个转换流:

  • InputStreamReader: 将InputStream转换为Reader

  • OutputStreamWriter:将Writer转换为OutputStream

  • 字节流中的数据都是字符时,转成字符流操作更高效。

  • 很多时候我们使用转换流来处理文件乱码问题。实现编码和解码的功能

技术图片

转换流的使用

输入流

  1. 转换流:

    • InputStreamReader:将- -个字节的输入流转换为字徒的输入流
    • outputstreamwriter:将-一个字符的输出流转换为字节的输出流
  2. 作用:提供字节流与字符流之间的转换

  3. 编码与解码

    • 解码:字节、字节数组--->字符数组、 字符串
    • 编码:字符数组、字符串--->字节,字节数组
  4. InputStreamReader的参数2指明了字符集,具体使用哪个字符集,取决于文件test.txt保存时使用的字符集
    InputStreamReader默认是系统的编码
    
  5. 注意此时仍应该用try-catch块

package com.dreamcold.io;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class Demo12 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("test.txt");
        InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
        char[] cbuf=new char[20];
        int len;
        while ((len=isr.read(cbuf))!=-1){
            String str=new String(cbuf,0,len);
            System.out.println(str);
        }
        isr.close();

    }
}
  1. 结果如下:
技术图片

综合使用InputStreamReader和utputstreamWriter

package com.dreamcold.io;


import java.io.*;

public class Demo13 {
    public static void main(String[] args) throws IOException {
        File file1=new File("test.txt");
        File file2=new File("test2-gbk.txt");

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

        InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
        OutputStreamWriter osw=new OutputStreamWriter(fos,"GBK");

        char[] buf=new char[10];
        int len;
        while ((len=isr.read(buf))!=-1){
            osw.write(buf,0,len);
        }

        isr.close();
        osw.close();
    }
}

效果:

技术图片

Java-IO流系列-转换流

标签:try   fileinput   转换   put   exception   close   leo   loading   问题   

原文地址:https://www.cnblogs.com/mengxiaoleng/p/14940212.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!