Java——IO流(三) 转换流、序列化流与打印流

1. 转换流

1.1 字符编码和字符集

字符编码

计算机中存储的信息都是二进制数表示的,屏幕上看到的文本、图片等都是二进制数转换之后的结果。按照某种规则,将字符存储到计算机中,称为编码。反之将存储在计算机中的二进制数按照某种规则解析显示出来,称为解码

编码: 字符(看得懂的) --> 字节(看不懂的)

解码: 字节(看不懂的) --> 字符(看得懂的)

  • 字符编码Character Encoding:就是一套自然语言的字符与二进制数之间的对应规则
  • 编码表:生活中文字和计算机中二进制的对应规则

字符集

  • 字符集charset:也叫编码表。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等。

一套字符集必然至少有一套字符编码。常见的字符集有ASCII字符集、GBK字符集、Unicode字符集等
在这里插入图片描述
可见,当制定了编码,它所对应的字符集自然就制定了,所以编码才是我们需要关心的内容。


1.2 编码引发的问题

IDEA的设置默认是UTF8的编码格式,而Windows系统默认的编码格式是GBK(在系统中显示为ANSI),因此IDEA读取Windows系统创建的文本文件时,就会出现乱码。


1.3 转换输入流

java.io.InputStreamReader 这是FileReader的父类,可以指定编码表。字节流通往字符流的桥梁。

构造方法:

  • InputStreamReader(InputStream in,String charsetName)
    • InputStream in:字节输入流
    • String charsetName:指定编码表名称,不区分大小写。默认UTF-8

读取方法和普通的IO流一致,没有区别。


1.4 转换输出流

java.io.OutputStreamWriter这是FileWriter的父类,可以指定编码表。字符流通向字节流的桥梁。

构造方法:

  • OutputStreamWriter(OutputStream out, String charsetName)
    • OutputStream out:字节输出流
    • String charsetName:指定编码表名称,不区分大小写。默认UTF-8

注意事项: 构造方法中指定的编码表名称要和文件的编码相同,否则会发生乱码。


1.5 使用示例

以下例子是把一个UTF8编码格式的文件转换成GBK编码格式的文件。

public class Test {
   
    public static void main(String[] args){
   
        try(InputStreamReader isr = new InputStreamReader(new FileInputStream("UTF8.txt"),"UTF8");
            OutputStreamWriter osr = new OutputStreamWriter(new FileOutputStream(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值