当前位置: 首页 > 知识库问答 >
问题:

ByteBuffer put方法在字节数组后添加0

越嘉树
2023-03-14
    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|..... 
ClientData_|OAT_=14.9926405_|FQRIGHT_=39.689075_|.....

文档中没有提到这种副作用。另外,put方法只在字节数组之间放入一个0,而不是在缓冲区的最末端。

我认为该方法可能是错误的,或者至少没有正确地记录下来,但我真的不知道它为什么会这样做。

共有1个答案

严宸
2023-03-14

我想你可能稍微曲解了这里发生的事情。我注意到你关于“但不是在缓冲区的最后”的评论。

\0实际上来自putchar(char)调用,而不是put(byte[])调用。正如文件中所说(着重部分已加):

按当前字节顺序写入包含给定字符值的两个字节

buffer.put((byte) '|');
 类似资料:
  • 问题内容: 我有这个字节数组: 现在,假定此字节数组的CRC校验和为0x60、0x0A。我希望Java代码重新创建此校验和,但是我似乎无法重新创建它。我尝试了crc16: 并使用Integer.toHexString()进行转换,但结果均不匹配正确的CRC。有人可以根据CRC公式指出我正确的方向。 问题答案: 请使用以下代码: 但是,您可能必须反转返回的CRC才能获得正确的字节序。我什至在这里测试

  • 本文向大家介绍C#将字节数组转换成数字的方法,包括了C#将字节数组转换成数字的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#将字节数组转换成数字的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍C#将数字转换成字节数组的方法,包括了C#将数字转换成字节数组的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#将数字转换成字节数组的方法。分享给大家供大家参考。具体实现方法如下: 下面的代码用到了MemoryStream 和 BinaryWriter 希望本文所述对大家的C#程序设计有所帮助。

  • 问题内容: 情况 我想在的每个后面添加一个数字。 例 从 至 题 我应该如何写替换字符串? 这 只是一个例子 ,所以建议是 不是 一个有效的答案。 我想知道替换字符串中的反向引用后如何具有数字。 问题答案: 解决方案是将反向引用包装在中。 这将输出 a8bcde8fghi8j 有关此特殊情况的参考,请参见手册。

  • 我在android中添加了第三方字体。我把字体放在资产/字体/qqqq.ttf的根目录中 但它有这样一个错误:无法生成本机字体。 有什么问题?有人知道吗?非常感谢!

  • 出于某些原因,我需要通过服务器套接字分别发送多个字节数组,客户端套接字将接收这些字节数组。发送字节数组后,发现客户端套接字接收的字节数组与服务器套接字接收的字节数组不相等。如果我使用ObjectOutputStream和ObjectInputStream,那么一切都很好,但是根据我的需要,我不能使用ObjectOutputStream和ObjectInputStream,因为我的服务器需要连接两个