Java(字节流向字符流的转化)

字节流和字符流是Java提供的两种输入/输出处理方式。字节流以单个字节为读/写单位,字符流以字符为读/写单位。一般字符由多个字节组成。InputStreamReader和OutputStreamWriter用来作为字节和字符之间的中介,可以把以字节形式表示的流转化为特定平台上的字符表示。可以从一个字节流构造一个字符流对象。可以在构造这些流对象时指定字符编码规范,也可以用当前平台默认编码规划。
InputStreamReader的构造函数如下
public InputStreamReader(InputStream in)使用当前平台默认的编码规范,从字节流in构造一个字符流对象
public InputStreamReader(InputStream in,String charsetName)使用特定的字符集编码规范,从字节流in构造一个字符流对象
public InputStreamReader(InputStream in,charset cs)使用一个字符集对象cs和字节流in构造输入字符流
public InputStreamReader(InputStream in,CharasetDecoder dec)使用字符集解码器dec和字节流in构建输入字符流。
in是一个字节流对象,charsetName是字符集的名字,cs是表示字符集的对象,dec是一个字符集解码器。
如果使用了不支持的字符集,那么会产生一个UnsupportedEncodingException异常。

OutputStreamWriter
构造函数
public OutputStreamWriter(OutputStream out)使用当前平台默认的编码规范,从字节流out构造一个字符流对象
public OutputStreamWriter(OutputStream out,String charsetName)使用特定的字符集编码规范,从字节流out构造一个字符流对象
public OutputStreamWriter(OutputStream out,Charset cs)使用一个字符集对象cs和字节流out构造输出字符流
public OutputStreamWriter(OutputStream out,CharsetEncoder enc)使用字符集编码器enc和字节流out构造输出字符流
这里out是一个输出字节流对象,charsetName是字符集的名字,cs是表示字符集的对象,enc是一个字符集编码器。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class StreamToReaderWriter {
    public static void main(String[] args)throws IOException {
        File file=new File("src/StreamToReaderWriter.java");
        FileInputStream fin=new FileInputStream(file);
        FileOutputStream fout=new FileOutputStream("copy-of-file.txt");
        InputStreamReader isr=new InputStreamReader(fin,"GBK");
        OutputStreamWriter osw=new OutputStreamWriter(fout,"GBK");
        System.out.println("Current charset of Reader  is:"+isr.getEncoding());
        System.out.println("Current charset of Writer  is:"+osw.getEncoding());
        int n=(int)(file.length()/30);
        System.out.println("First "+n+"char of the file one read() at a time");
        for(int i=0;i<n;i++)
        {
            osw.write(isr.read());
        }
        System.out.println("Reading the next "+n+"with one read(b[])");
        char b[]=new char[n];
        if(isr.read(b)!=n)
        {
            System.err.println("could't read "+n+"bytes.");
        }
        osw.write(b);
        System.out.println("Reading the rest chars with read(b[],offset,len)");
        int count=0;
        while((count=isr.read(b, 0,n))!=-1)
                osw.write(b,0,count);
        isr.close();
        fin.close();
        osw.flush();
        osw.close();
        fout.flush();
        fout.close();       
    }
}

有问题
Exception in thread “main” java.io.FileNotFoundException: src\StreamToReaderWriter.java (系统找不到指定的文件。)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.(Unknown Source)
at Main.StreamToReaderWriter.main(StreamToReaderWriter.java:14)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值