```cpp ByteStream::ByteStream(const size_t cap) : buffer(), capacity(cap), end_write(false), end_read(false), written_bytes(0), read_bytes(0) {} ``` 上面等价于下面 ```java public class ByteStream { private Queue<Byte> buffer; private final int capacity; private boolean endWrite; private boolean endRead; private int writtenBytes; private int readBytes; // 构造函数 public ByteStream(int cap) { this.buffer = new LinkedList<>(); // 相当于 C++ 中的 buffer() this.capacity = cap; // 相当于 C++ 中的 capacity(cap) this.endWrite = false; // 相当于 C++ 中的 end_write(false) this.endRead = false; // 相当于 C++ 中的 end_read(false) this.writtenBytes = 0; // 相当于 C++ 中的 written_bytes(0) this.readBytes = 0; // 相当于 C++ 中的 read_bytes(0) } } ``` 这是 C++ 的构造函数(Constructor),相当于 Java 中的构造函数。让我们对比一下: ```cpp // C++ 构造函数 class TCPReceiver { TCPReceiver(const size_t capacity) : _reassembler(capacity), // 初始化成员变量 _capacity(capacity), // 初始化成员变量 _synReceived(false), // 初始化成员变量 _finReceived(false), // 初始化成员变量 _isn(0) // 初始化成员变量 {} }; ``` ```java // Java 等价代码 public class TCPReceiver { private StreamReassembler _reassembler; private long _capacity; private boolean _synReceived; private boolean _finReceived; private int _isn; // 构造函数 public TCPReceiver(long capacity) { this._reassembler = new StreamReassembler(capacity); this._capacity = capacity; this._synReceived = false; this._finReceived = false; this._isn = 0; } } ``` 主要区别: 1. 初始化语法: ```cpp // C++ 使用初始化列表(:后面的部分) TCPReceiver(const size_t capacity) : _reassembler(capacity), // 成员初始化列表 _capacity(capacity) {} // Java 在构造函数体内初始化 public TCPReceiver(long capacity) { this._reassembler = new StreamReassembler(capacity); this._capacity = capacity; } ``` 2. 参数传递: ```cpp // C++ 使用 const 表示参数不会被修改 TCPReceiver(const size_t capacity) // Java 没有 const public TCPReceiver(long capacity) ``` 3. 成员变量初始化: ```cpp // C++ 可以在声明时初始化 bool _synReceived{false}; // 或在初始化列表中初始化 // Java 可以在声明时初始化 private boolean _synReceived = false; // 或在构造函数中初始化 ``` 这个构造函数的作用是: 1. 创建一个新的 TCP 接收器 2. 设置其缓冲区容量 3. 初始化所有状态变量: - `_reassembler`: 用于重组数据的组件 - `_capacity`: 缓冲区容量 - `_synReceived`: 是否收到 SYN 标志 - `_finReceived`: 是否收到 FIN 标志 - `_isn`: 初始序列号 就像是在准备一个新的邮件接收系统: 1. 设置收件箱大小(capacity) 2. 准备一个分类系统(reassembler) 3. 初始化所有状态标记 4. 设置起始编号