转换流-转换流的原理、InputStreamReader类和OutputStreamWriter类

转换流的原理

OutputStreamWriter类

OutputStreamWriter:是字符流通向字节流的桥梁 可以使用指定的charset将要写入流中的字符编码成字节(编码:将能看懂的编程看不懂的)

父类的共性成员方法:

void write(int c)写入单个字符
void write(char[] cbuf)写入字符数组
abstract void write(char[] cbuf,int off,int len)写入字符数组的某一部分 off数组的开始索引 len写的字符个数
void write(String str)写入字符串
void write(String str,int off,int len)写入字符串的某一部分 off字符串的开始索引 len的字符个数
void close()关闭此流 但要先刷新它

构造方法

OutputStreamWriter(OutputStream out):创建使用默认字符编码 outputStringWriter
OutputStreamWriter(OutputStream out,String charsetName):创建使用指定字符集的OutputStreamWriter

参数:

OutputStream out:字节输入流 可以用来写转换之后的字节到文件中

String charsetName:指定的编码表名称 不区分大小写 可以是utf-8/UTF-8,GBK 不指定默认使用UTF-8

使用步骤

1.创建OutputStreamWriter对象 构造方法中传递字节输出流和指定的编码表名称

2.使用OutputStreanWruter对象中的方法Wrute 把字符转换为字节存储缓存去中(编码)

3.使用OutputStreamWriter对象中的方法fluash 把内存缓冲区中的字节刷新到文件中(使用字节流写字节的过程)

4.获取资源

代码:

 public static void main(String[] args) throws IOException {
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\\file\\d.txt"), "utf-8");

        osw.write("你好");


        osw.close();
    }

运行前:

 

 

 运行结果:

 

 

 运行后

 

 

 d.txt:

 

 

 

InputStreamReader类

转换流InputStreamReader 是Reader的子类 是从字节流的桥段 它读取自己 并使用指定的字符集将其解码为字符 它的字符集可以由名称指定 也可以接受平台的默认字符集

InputStreamReader:是字节流通向字符流的桥梁:它使用指定的charser读取字节并将其解码为字符(解码:把看不懂的变成能看懂的)

父类的共性成员方法:

int read():读取单个字符并返回
int read(char[] cbuf)一次读取多个字符 将字符读入数组
void close():关闭该流并释放与之关联的所有资源

构造方法

InputStreamReader(InputStream in):创建一个使用默认字符集的字符流
InputStreamReader(InputStream in,String charName):创建一个指定字符集的字符流

参数:

InputStream in:字节输入流 用来读取文件中保存的字节

String charserName:指定的编码表 不区分大小写 可以是utf-8/UTF-8 不指定默认使用UTF-8

使用步骤:

1.创建InputStreamReader对象 构造方法中传递字节输入流和指定的编码表名称

2.使用InputStreamReader对象中的方法read读取文件

3.释放资源

 

 

 注意事项:

构造方法中指定的编码表名称要和文件的编码相同 否则会发生乱码

代码:

 public static void main(String[] args) throws Exception {
        InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\file\\d.txt"),"UTF-8");
        int len=0;
        while ((len=isr.read())!=-1){
            System.out.println((char) len);
        }

        isr.close();
    }

运行结果:

posted @ 2022-07-19 17:25  baimingze  阅读(86)  评论(0)    收藏  举报