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

原创 2013年12月03日 21:53:19

 ----------------------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培训、期待与您交流! -----------

 

 

 

 

 

 

 

 

黑马程序员——Java基础测试题

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 黑马程序员——Java基础测试题 第1题:以下代码哪个是正确的?为什么?   a. byte...
  • liu007004
  • liu007004
  • 2015年01月16日 12:49
  • 1373

黑马程序员——Java基础---练习题

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Java基础---练习题 1.写出程序结果class Demo { public stat...
  • liu007004
  • liu007004
  • 2015年01月19日 16:35
  • 662

JAVA I/O中面向字节的InputStream和OutputStream以及面向字符的Reader和Writer简介

转自:http://blog.csdn.net/kkdelta/article/details/7780998 Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式. ...
  • sinat_29581293
  • sinat_29581293
  • 2016年08月05日 13:57
  • 1177

黑马程序员_我的Linux基础整理笔记

Linux Linux文件目录和分区 文件目录: /:根目录 /root:存放root用户的相关文件 /home:存放普通用户的相关文件 /bin:存放普通用户的可执行命令 /sbin:...
  • zhengzhongjie1990
  • zhengzhongjie1990
  • 2014年07月05日 17:08
  • 1526

传智 刘意 2015年Java基础视频-深入浅出精华版 笔记 day24~day26(2016年4月26日13:11:30)

day24 1.多线程(JDK5之后的Lock锁的概述和使用)   Lock:           void lock(): 获取锁。           void unlock():释放锁。 ...
  • juliantem
  • juliantem
  • 2016年04月15日 00:40
  • 4936

帮你理清Java中字符与字节的编码关系

版权声明:本文为博主原创文章,未经博主允许不得转载。 转载请注明出处:http://blog.csdn.net/ns_code/article/details/14162087  ...
  • rabbit_in_android
  • rabbit_in_android
  • 2016年04月21日 15:38
  • 562

黑马程序员----0704期java基础班心得

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 黑马程序员----0704期java基础班心得            对于任何一个刚接触ja...
  • DreamStartDemo
  • DreamStartDemo
  • 2015年07月28日 12:49
  • 388

帮你理清Java中字符与字节的编码关系

在 GB 2312 编码或 GBK 编码中,一个英文字母字符存储需要1个字节,一个汉字字符存储需要2个字节。 在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。...
  • mmc_maodun
  • mmc_maodun
  • 2013年11月06日 08:14
  • 14558

黑马程序员java基础篇----字符编码

android培训java培训期待与您交流 一、编码解码&码表 1、常见的编码表:    ASCII:美国标准信息交换码---用一个字节的7位可以表示。    ISO8859-1:拉丁码表...
  • ALP102302
  • ALP102302
  • 2013年04月07日 17:53
  • 528

黑马程序员_java多线程的一些总结(一)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、    进程和线程 1、   进程和线程的关系。 一般来说,我们运行一个应用程序的,就启动...
  • u011449569
  • u011449569
  • 2015年10月29日 00:23
  • 287
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员_java基础篇操作数据的,操作字节数组的,字符编码Day6
举报原因:
原因补充:

(最多只允许输入30个字)