黑马程序员_java基础篇操作数据的,操作字节数组的,字符编码Day6

 ----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! -----------

 

                                 黑马程序员_java基础篇操作数据的,操作字节数组的,字符编码Day6

 

 

 这些类都是IO包中的,重点是编码问题,趁自己还没有忘记赶快记下来。

(一)

       对于我们的数据操作流 DataInputStream,主要还是为我们对数据操作提供了方便,如下我们可以看到它的方法有很多,对数据操作的如下:


  

     DataOutputStream dos=new DataOutputStream(new FileOutputStream("d:/demo.txt"));
       dos.writeUTF("da");
       dos.writeInt(11);
       dos.close();
      
      
       DataInputStream  dis=new DataInputStream(new FileInputStream("d:/demo.txt"));
      
      System.out.println("字符串"+dis.readUTF()+"数字"+dis.readInt());

 

在从文件中读出数据时,不用费心地自行判断读入字符串时或读入int类型时何时该停止,使用对应的readUTF()或readInt()方法就可以正确地读入完整类型数据。同样地,DataInputStream、DataOutputStream并没有改变InputStream或OutputStream的行为,读入或写出时的动作还是InputStream、OutputStream负责。DataInputStream、DataOutputStream只是在实现对应的方法时,动态地为它们加上类型判断功能。

(二)

ByteArrayInputStream,ByteArrayOutputStream这个类也有点神奇,因为他不需要我们关闭,WHY?因为他压根就没有用到系统资源,内部封装了数组,如果你想将文本中的数据读入内存中用它。

ByteArrayInputStream bis=new ByteArrayInputStream("ss".getBytes());
      
 ByteArrayOutputStream bos=newByteArrayOutputStream();
       
int len=0;
       
        while((len=bis.read())!=-1)
       {
             bos.write(len);
       
      }


 

可以将ss源改成文件。

 

(三)字符编码

这是一个永恒的话题,我们要注意编码问题,像这几天做课设就有自己的网页中用的是gbk,数据库用的是UTF8,最后出现乱码,找了好久才找出来,编码有许多ACSII,gbk,Unicode

,其实Unicode包含了UTF8。要想不乱码,必须得用一种编码。

 

就像我们平常所说的“联通”二字,如果写在记事本中保存再打开会出现乱码,这是为什么呢?

这是编码问题,我们先解释一下,再通过程序来看看原理。

 

由于记事本保存时,默认的格式是gbk(中文系统),但是联通二字,有点特别,所有的数据最后在计算机中都是用二进制表示的,“联通”二字虽然用gbk存储,但是打开的时候,记事本通过判断头部特征,结果与UTF8的一样,就不管三七二十二用UTF8的表示了。UTF8特征头部是

110… 后面的是10…如果头部有两个1,后面的格式有事10…,那么就读两个字节。如果1110那么就读三个字节,后面的是10..,10…,

 

见程序:

String  str="联通";
      
      
       byte[] b=str.getBytes("GBK");
    for(byte bi:b)
    {
       System.out.println(Integer.toBinaryString(bi&255));
   }


 

输出结果又两种:

不与255的

 

 

与255的

 

 

为什么要与&255呢?

 

因为我们看到不与255的结果是前面24位都是1,因为中文字表示的时候,用GBK,一个中文字表示两个字符,四个字节,32位,一般是负数。所以前面的24位基本都是1.

 

 

 

 

 

 

 

 ----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! -----------

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值