(Io流)关于在idea中为什么用字节输入流输出对应文件时会出现乱码?

本文分析了在Idea中使用字节输入流读取GBK编码的文本文件时,由于字节数组长度不合适导致的乱码问题。通过示例代码展示不同字节数组长度读取同一文本时,为何会出现部分字符无法正确解码的现象,并提出避免该问题的方法:优先使用字符输入流,确保编码和解码使用相同码表。
摘要由CSDN通过智能技术生成

 

ASCII(国外),GBK(国内)是一种字符集;
GBK中.一个英文字母一个字节,二进制第一位是0;
GBK中,一个中文汉字两个字节,二进制的第一位是1

Unicode(万国码)也是一种字符集,而CTF-8则是一种编码规范;

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
idea中用的是CTF-8编码规范,汉字为三个字节;
public class Main {
    public static void main(String[] args) throws IOException {
        FileInputStream fileInputStream=new FileInputStream("aaa.txt");
        int len=0;
        byte[]array=new byte[12];
        while((len=fileInputStream.read(array))!=-1){
            String a=new String(array,0,len);
            System.out.println(a);
 }
输出的结果为:

我是大帅

比如这样 此时aaa.txt中的文本内容为"我是大帅哥";
1.经过分析,我是大帅哥一共占15个字节;
2当我创建一个长度为12的byte数组时,字节流他会一次性读取aaa.txt中"我是大帅哥"所对应的的二进制编码,如果我此时byte数组长度是12,一次性读取12个字节;
3.第一次读取12个字节所对应的刚好就是"我是大帅"这四个字所对应的12个字节;下一次将继续重复操作;


public class Main {

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值