黑马程序员_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培训、期待与您交流! -----------

 

 

 

 

 

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

黑马程序员42,基本数据操作流,字节数组操作流,转换流,编码表

----------- android培训、java培训、java学习型技术博客、期待与您交流!------------  黑马程序员42,基本数据操作流,字节数组操作流,转换流,编码表   ...

黑马程序员——Java基础---IO(二)---对象流、管道流、RandomAccessFile、数据流、数组流、字符编码

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 学习笔记——IO流——对象流、管道流、RandomAccessFile、数据流、...

黑马程序员——用于操作字节数组的流对象

----------------------    android培训    java培训   期待与您交流!    ----------------------&#...

JAVA基础 day23 IO流的其他类 (对象的序列化 管道流 RandomAccessFile类(随机读取文件) DateStream(操作基本数据类型的流) 操作数组的流 )字符编码问题

IO流其他类对象的序列化 序列化:把Java对象转换为字节序列的过程。 反序列化:把字节序列恢复为Java对象的过程用途:把对象的字节序列永久的保存到硬盘上,通常存在文件中。 ...

黑马程序员_10字节流、字符流、转换流、控制流、数据流、字节数组流

一、流简介 按数据流的方向不同分:输入流 输出流 按处理数据单位不同分:字节流 字符流 按照功能不同可以分为: 节点流:InputStrea...

day21操作字节数组流,编码解码

/* 用于操作字节数组的流对象  ByteArrayInputStream 在构造时,需要接收数据源,而数据源是一个字节数组 ByteArrayOutputStream 在构造时,不用定义数组目的,...

黑马程序员:字符数组,字节数组,字符串的流对象

---------------------- android培训、java培训、期待与您交流! ---------------------- 用于操作字节数组的流对象。 ByteArrayInou...

黑马程序员-----IO之字节数组流、字符数组流和字符串流

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 1.字节数组流 字节数组流包...

黑马程序员_Java基础_IO流(对象序列化和字符编码)

------- android培训、java培训、期待与您交流! ---------- 一、IO流(对象的序列化) 对象流:ObjectInputStream和ObjectOutputStream(...

黑马程序员---2015.6.27java基础笔记--字符编码--TCP--UDP

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1.操作基本数据类型         DataInputStream和DataOutpu...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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