黑马程序员——IO_编码与解码

------- android培训java培训、期待与您交流! ----------

一、编码与解码

        编码:字符串变成字节数组。

        解码:字节数组变成字符串

 

        String --> byte[]; str.getBytes();

        byte --> String: new String(bytep[]);

 

 二、编码和解码发生错误时

          1)如果编码的时候产生错误,就放弃

          2)如果解码的时候产生错误,就编一次,解一次(通用方法)[对编码的时候用gbk,解码的

          时候用utf-8,这种方法不行,因为utf-8会去找相似的字,结果源码就会变掉]

          在记事本里输入联通两个字,就会变成乱码,因为这两个字符合联通的编码形式符合UTF-8的编码规则

如下图所示:

      

三、知识点

         1) 没有方法的接口称之为标记接口

          2)FileOutputStream out;

          3)out.write(256) 只是输出最低8位

          4)打开记事本其实是解码的过程

          5)utf-8修改版

四、其他流

 

         1) objectInputStream与ObjectOutputStream

         被操作的对象需要实现Serizlizable(标记接口); static final long serialVersionUID = 42L;

          Serizlizable接口的标签

 

         将堆内存中的对象转化为硬盘上的

         所以静态的不能序列化(也称为持久化存储),,在方法区

         加关键字transient 也不能序列化

 

        2)管道流:

        PipedInputStream 和PipedOutputStream

        输入输出可以直接进行连接,通过结合线程使用

 

五、 RandomAccessFile

        1、随机访问文件,自身具备读写的方法。 

        2、通过skipBytes(intx),seek (int x) 来达到随机访问

        3、该类不是IO体系中的子类。

        4、而是直接继承来自Object

        5、 但是它是IO包中成员,因为它具备读和写功能。

        6、内部封装了一个数组,而且通过指针对数组元素进行操作

        7、 可以通过getFilePointer获取指针信息

        8、同时可以通过seek改变指针的位置 

        9、 其实文成读写的原理就是内部封装了字节输入流和输出流

        10、 通过构造函数可以看出,该类只能操作文件

        11、如果模式为只读r,不会创建文件,会去读取一个已存在文件,如果该文件不存在

        12、则会出现异常。

        13、如果模式为rw,操作的文件不存在会自动创建,存在会创建,存在则不会覆盖

        14、通过seek方法,调整对象中指针,a.write(int) 输出的是参数的最低8位,

 

 六、  可以用于操作基本数据类型的流对象

       1) DataInputStream与DataOutputStream 如果以writeUTF只能以对应的方法来读取。不能用转换流,

        writeUTF用的   


       2)如果是字节流,存入到记事本里,系统会选择编码表来查,所以都是乱码。


       3)操作基本数据类型

       DataInputStream与DataOutputStream

 

       4) 操作字节数组

       ByteArrayInpuStream 与

       ByteArrayOutputStream

 

      5) 操作字符数组

          CharArrayReader与CharArrayWrite

      6) 操作字符串

           StringReader与StringWriter

           ByteArrayInputStream: 在构造的时候,需要接收数据源,而且数据源是一个字节数组

           ByteArrayOutputStream: 在构造的时候,不用定义数据目的,因为该对象中已经内部

                                                      封装了可变长度的自己数    组,这就是数据目的地。

          因为这两个流对象都操作数组,并没有使用系统资源,所以,不用进行close关闭。

 

           源设备:

                         键盘 System.in 硬盘 FileStream 内存 ArrayStream

          目的设备:

                         控制台 System.out     硬盘 FileStream  内存 ArrayStream

          用流的思想来操作数组


七、编码表:

        计算机只能识别二进制数据,早起又来是电信号

        为了方便应用计算机,让它可以识别各个国家的文字,就将各个国家的文字用数字来表示

        并一一对应,形成一张表


八、常见的几种码表:

      ASCII: 美国标准信息交换码 用一个字节的7位可表示

      ISO8859-1 : 拉丁码表,欧洲码表, 用一个字节的8位表示

      GB2312: 中国的中文码表

      GBK: 中国的中文编码表升级,融合了更多的中文文字字符号

      Unicode: 国标标准码,融合了多种文字;

      UTF-8: 最多用三个字节来表示一个字符

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值