ByteBuffer put 方法在 ByteArray 之后添加 0
ByteBuffer put method adds 0 after ByteArray
我目前 运行 在 java.nio.bytebuffer 的 put 方法中遇到了一个非常奇怪的问题,我想知道你是否知道答案,所以让我们开始吧。
我的目标是将一些数据连接到字节缓冲区。问题是在我调用 put 方法后它总是在字节数组后添加一个 0。
下面是有这些副作用的方法:
public ByteBuffer toByteBuffer() {
ByteBuffer buffer = ByteBuffer.allocateDirect(1024));
buffer.put(type.name().getBytes()); // 0 added here
data.forEach((key, value) -> {
buffer.putChar('|');
buffer.put(key.getBytes()); // 0 added here
buffer.putChar('=');
buffer.put(value.getBytes()); // 0 added here
});
buffer.flip();
return buffer;
}
预期输出应如下所示:
ClientData|OAT=14.9926405|FQRIGHT=39.689075|.....
实际输出,其中 _ 代表 0:
ClientData_|OAT_=14.9926405_|FQRIGHT_=39.689075_|.....
文档没有说明任何有关此副作用的信息。
此外,put 方法只在字节数组之间放置一个 0,而不是在缓冲区的最后。
我认为该方法可能是错误的,或者至少没有正确记录,但我真的不知道为什么会这样。
我认为您可能稍微误解了这里发生的事情。我注意到你关于“但不在缓冲区的最后”的评论。
[=11=]
实际上来自 putChar(char)
调用,而不是 put(byte[])
调用。正如 the docs 中所说(强调):
Writes two bytes containing the given char value, in the current byte order
默认的字节顺序是big endian;鉴于您正在编写的字符在 7 位 ASCII 范围内,这意味着“您想要的字节”将以 0x00
.
开头
如果要写一个字节,使用put(byte)
:
buffer.put((byte) '|');
我目前 运行 在 java.nio.bytebuffer 的 put 方法中遇到了一个非常奇怪的问题,我想知道你是否知道答案,所以让我们开始吧。
我的目标是将一些数据连接到字节缓冲区。问题是在我调用 put 方法后它总是在字节数组后添加一个 0。
下面是有这些副作用的方法:
public ByteBuffer toByteBuffer() {
ByteBuffer buffer = ByteBuffer.allocateDirect(1024));
buffer.put(type.name().getBytes()); // 0 added here
data.forEach((key, value) -> {
buffer.putChar('|');
buffer.put(key.getBytes()); // 0 added here
buffer.putChar('=');
buffer.put(value.getBytes()); // 0 added here
});
buffer.flip();
return buffer;
}
预期输出应如下所示:
ClientData|OAT=14.9926405|FQRIGHT=39.689075|.....
实际输出,其中 _ 代表 0:
ClientData_|OAT_=14.9926405_|FQRIGHT_=39.689075_|.....
文档没有说明任何有关此副作用的信息。 此外,put 方法只在字节数组之间放置一个 0,而不是在缓冲区的最后。
我认为该方法可能是错误的,或者至少没有正确记录,但我真的不知道为什么会这样。
我认为您可能稍微误解了这里发生的事情。我注意到你关于“但不在缓冲区的最后”的评论。
[=11=]
实际上来自 putChar(char)
调用,而不是 put(byte[])
调用。正如 the docs 中所说(强调):
Writes two bytes containing the given char value, in the current byte order
默认的字节顺序是big endian;鉴于您正在编写的字符在 7 位 ASCII 范围内,这意味着“您想要的字节”将以 0x00
.
如果要写一个字节,使用put(byte)
:
buffer.put((byte) '|');