Java(I/O流)之三 转换流

一、转换流(InputStreamReader、OutputStreamWriter)简介

1.1 简单介绍
1. 转换流为处理流中的一类,作用于字节流之上,同时针对与处理数据类型的分类而言属于字符流
InputStreamReader是字节流到字符流的桥梁:它读取字节并使用指定的字符集将其解码为字符。它使用的字符集可以通过名称指定,也可以显式地给
出,或者可以使用默认字符集。

OutputStreamWriter是字符流和字节流之间的桥梁:写入它的字符使用指定的字符集编码为字节。它使用的字符集可以通过名称来指定,也可以显式地
给出,或者可以接受默认字符集。


2. 作用:提供字节流与字符流之间的转换
	>InputStreamReader:使用指定的字符集读取并解码来自字节流的数据,由字节流转换为字符流
	>OutputStreamWriter:使用指定的字符集编码并写入持久化存储设备,由字符流转换为字节流


3. 解码:字节、字节数组   -----> 字符数组、字符串
   编码:字符数组、字符串 -----> 字节、字节数组	
   
   
4. 字符集
    ASCII:美国标准信息交换码
    ISO8859-1:拉丁码表(欧洲码表)
    GB2312:中文编码表(两个字节编码所有的字符)
    GBK: GB2312的升级版,融合更多的中文文字字符
    Unicode: 国际标准码,融合了目前人类使用的所有字符
    UTF-8: 变长的编码方式,可用1-4个字节来表示一个字符
1.2 继承关系以及整体框架
// OutputStreamWriter类的声明
public class OutputStreamWriter extends Writer

|---java.lang.Object
	|---java.io.Writer
		|---java.io.OutputStreamWriter
		

// InputStreamReader类的声明
public class InputStreamReader extends Reader

|---java.lang.Object
	|---java.io.Reader
		|--- java.io.InputStreamReader

在这里插入图片描述

二、转换流的使用示例

读取文本文件并使用指定字符集编码写入文件
public void disposeStreamTest(){
	// 声明转换流对象
	InputStreamReader isr = null;
	OutputStreamWriter osw = null;
    try {
       // 创建待读取文件File对象以及待写入文件File对象
       File inputFile = new File("C:\\Users\\youngster\\Desktop\\数据库系统概述.txt");
       File outputFile = new File("C:\\Users\\youngster\\Desktop\\DataBaseDesc.txt");

	   // 创建字节型输入输出节点流对象
       FileInputStream fis = new FileInputStream(inputFile);
       FileOutputStream fos = new FileOutputStream(outputFile);

	   // 连接绑定节点流和转换流
	   // 使用默认的字符集进行解码读取文件内容(根据平台进行区别,可以使用getEncoding()方法获取当前流使用的字符集)
	   // 可以添加第二个参数进行设置解码文件内容的字符集,这里没有使用第二个参数,意味着使用默认的字符集
       isr = new InputStreamReader(fis); 
       // System.out.println(isr.getEncoding());
       
       // 使用gbk的字符集进行编码写入文件(意味着以后读取该文件必须使用gbk的字符集读取,否则乱码)
       osw = new OutputStreamWriter(fos,"gbk"); 
       
	   // 读取和写入文件内容
       char[] chars = new char[20];
       int readLen;
       while ((readLen = isr.read(chars)) != -1) {
           osw.write(chars, 0, readLen);
       }
   } catch (IOException e) {
       e.printStackTrace();
   } finally {
       if (isr != null) {
           try {
               isr.close();
           } catch (IOException e) {
               e.printStackTrace();
           }
       }

       if (osw != null) {
           try {
               osw.close();
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
   }
}	
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值