【发布时间】:2016-05-02 02:03:36
【问题描述】:
端口范围从 0 到 65536,因为它存储为 16 位无符号整数。
在 Java 中,16 位的 short 只能达到 32,767。整数可以,但 API 需要一个无符号整数,因此它必须在 16 位以内。
我的第一次尝试如下:
public byte[] encode() {
final int MESSAGE_SIZE = 10;
Bytebuffer buffer = ByteBuffer.allocate(MESSAGE_SIZE);
buffer.putInt(someInt);
buffer.putShort(portValue);
buffer.putInt(someOtherInt);
return buffer.array();
}
但很明显,如果我只是使用一个短的,我不能代表一个高于 32,767 的端口。
我的问题是,如何将最大为 65536 的值作为短路值放入缓冲区,以便接收 API 可以在 16 位内对其进行解释?
谢谢!
【问题讨论】:
-
你不能。使用
int和自己的边界或更好的边界,如果 API 不错,它会检查自身并在参数超出范围时抛出异常(例如 IllegalArgumentException)。