《Java TCP/IP Socket编程》读书笔记(上)

目录

  1. 第一章 简介
  2. 第二章 基本套接字
  3. 第三章 发送和接收数据
    1. 信息编码
    2. 组合输入和输出流
    3. 成帧与解析
    4. Java特定编码
    5. 构建和解析协议消息
    6. 发送和接收

第一章 简介

第二章 基本套接字

第三章 发送和接收数据

信息编码

  1. 基本整型
    注意要传输每个整数的字节大小;
    超过一个字节来表示数据类型时,字节发送顺序:little-endian和big-endian顺序;
    所传输的数值是有符号的(signed)还是无符号的(unsigned)
  2. 字符串和文本
    字符集(charset) = 编码字符集(coed character set) + 编码方案(encoding scheme)
  3. 位操作:布尔值编码
    位图(Bitmaps)是对布尔信息进行编码的一种非常紧凑的方式。掩码(mask)是一个整数值,其中有一位或多位被设为1,其他各位被清空(设为0)
    以int为例:
    1
    2
    3
    final int BIT5 = (1 << 5);
    final int BIT7 = 0x80;
    int bitmap = 1234567;
操作 例子
设置特定一位 bitmap |= BIT5
清空特定一位 bitmap &= ~BIT7
清空多位 bitmap &= ~(BIT5 | BIT7)
测试特定位是否设置 boolean bit5Set = (bitmap & BIT5) != 0

组合输入和输出流

输入输出 类型
Buffered[Input/Output]Stream 为输入/输出优化 执行中间转换
Checked[Input/Output]Stream 维护数据检查和
Cipher[Input/Output]Stream 加密/解密数据
Data[Input/Output]Stream 处理基本数据类型的读写
Digest[Input/Output]Stream 维护数据摘要
GZIP[Input/Output]Stream 以gizp格式解压缩字节流
Object[Input/Output]Stream 处理读写对象和基本数据类型
PushbackInputStream 允许一个字节或多个字节是“未读的”
PrintOutputStream 输出数据类型的字符串表示法
Zip[Input/Output]Stream 以zip格式解压缩字节流

成帧与解析

成帧(framing)技术解决接收端如何定位消息的首尾位置的问题。
a. 基于定界符(Delimiter-based):用于以文本方式编码的消息中,填充(stuffing)技术能够对消息中出现的定界符进行修改,从而使接收者不将其识别为定位符。缺点:发送者和接收者双方都必须扫描消息
b. 显示长度(Explicit length):必须知道消息长度的上限

Java特定编码

  • RMI(Remote Method Invocation)
    能够调用不同虚拟机的方法,并隐藏所有烦琐的参数编码解码细节
  • Serialization
    将实际的Java对象转化成字节序列工作

构建和解析协议消息

  • 基于文本的表示方法
  • 二进制表示方法

发送和接收