ASCII 数字 0-9 对应的 byte 值为 48-57
Unicode 与 Java
char 是字符数据类型,是无符号的,占2字节,大小范围是 0-65535,是 16 位二进制的 Unicode 字符,Java 用 char 来表示一个字符
大部分中文使用三个字节的 UTF-8 方法编码
IO 传输的两个关键问题:
- Encode/Decode
- Big Endian/Little Endian
二进制方式读取文件
- ByteArrayOutputStream: 可以捕获内存缓冲区的数据,转换成字节数组
- ByteArrayInputStream: 可以将字节数组转化为输入流
- 字符串的编码/解码问题
charset - 多字节数据(short/int/long/double/float)的编码/解码问题
ObjectOutputStream (默认 Big-Endian 顺序) - Object 对象编码/解码问题
Java Serialize 机制(二进制)以及 java.beans 包里面的 XMLEncoder (文本编码)
Java Object 序列化机制
- 当父类实现了序列化,子类也自动实现了序列化,不需要显式实现 Serializable 接口
- 反过来一个子类实现了 Serializable 接口,希望父类对象序列化,需要父类也实现Serializable 接口,否则父类对象的成员变量不参与序列化
- 当一个对象的实例变量引用其他对象,序列化该对象时,也会把引用对象也进行序列化
- 某些对象不能序列化,如:安全问题不能远程传输的对象、无法重新还原的对象(socket、thread、Stream)
RandomAccessFile==>MappedByteBuffer
MappedByteBuffer:内存映射文件
MapMode 映射模式:
- READ_ONLY 只读映射模式
- READ_WRITE 读写映射模式
- PRIVATE 通过 put 方法对 MappedByteBuffer 的修改不会修改到磁盘文件,只修改虚拟内存的修改
MappedByteBuffer 在父类 ByteBuffer 的基础上新增了几个方法
- fore 缓冲区在 READ_WRITE 模式下,此方法对缓冲区所做的内容更改强制写入文件
- load 将缓冲区的内容载入物理内存,并返回该缓冲区的引用
- isLoaded 判断缓冲区的内容是否在物理内存,如果在就返回 true,否则返回 false
Java IO 中应用到了装饰者模式