编码

  • 编码中,原始的编码只支持英文,随着编程在国际上的推广,各个国家都使用编程,但是各个国家的语言都不一样,如果进行传输的情况会有不同的要求 - 就是将所有的语言文字全部编程字节码文件传输(byte),把文字打乱成字节码的过程叫做编码,将byte转回来的过程叫解码,在这个过程中有一个编码解码的格式,如果格式不一致就会出现乱码问题。

支持中文的解码格式:

  • utf-8 — 默认使用在linux系统的(包括部分的mac系统)
  • gbk — 默认使用在windows系统的

区别:

  • utf-8格式下的中文:一个中文是3个字节
  • gbk格式下的中文:一个中文是2个字节

通常情况下,乱码问题都是出现在非英文字母的数据(文字和符号)中
_

序列化和反序列化

image.png
序列化:利用序列化流将一个对象的整体转换为二进制的数据,并且存储到文件中,将对象永久性的 存入一个文件,叫做序列化,读取的过程叫做反序列化。

对象是需要封装的,为了实现对象的序列化,我们要将对象实现一个序列化接口 - Serializable
这个接口中没有方法,就只是一个规范,只要实现了这个接口,序列化的时候就不会出现问题。

  • 序列化版本号:序列化ID(serialVersionUID),用于记录对象的类型
  • 每一个被序列化的对象操作对象其对象的ID与接收类型的ID必须一致。
  • 序列化ID和反序列化的ID必须一致。

封装一个开发级别的实体类(标准的实体类):

  • 1.必须实现序列化接口 - 声明UID
  • 2.属性私有化,并且声明get/set方法
  • 3.声明无参、有参构造
  • 4.重写hashCode和equals方法
  • 5.重写toString方法

拓展:

  • transient关键字在序列化中的使用:是一个修饰符,被修饰的属性可以在序列化中被忽略。
  • 在某些特定的业务场景会使用。

序列化对象:
ObjectOutputStream:序列化流(对象输出流)

  • public final void writeObject(Object obj)

ObjectInputStream:反序列化流(对象输入流)

  • public final Object readerObject()

打印流

  • 打印流(自动行刷新流):只有输出没有输入!
  • printSteam:字节打印流,调用printIn方法自动刷新
  • PrintWriter:字符打印流,指定自动化刷新开关后,调用printIn方法自动刷新,无需手动调用flush方法

  • 在网络传输中使用很多