```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. 设置起始编号