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

来源:互联网 发布:c专家编程百度云 编辑:程序博客网 时间:2024/05/16 00:59

字节流和字符流是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