最后一个值为空时的ByteBuffer翻转[重复]

Posted

技术标签:

【中文标题】最后一个值为空时的ByteBuffer翻转[重复]【英文标题】:ByteBuffer flip when last value is null [duplicate] 【发布时间】:2017-07-26 16:57:28 【问题描述】:

我有一个应该返回 ByteBuffer 的方法。该方法的主要内容如下:

if (true) 
    //code that puts some data into ByteBuffer bb
    return bb

else 
    //should not be writing any data to bb 
    //intention: leave bb as is
    return null;

调用此方法并将必要的数据放入 ByteBuffer 后,我首先调用bb.flip() 将其转换为字节数组。但是,如果通过 if-else 循环的最后一次迭代碰巧是错误的,那么最后输入的数据是 null 并且我得到 java.lang.NullPointerException 错误。

Allocating zero capacity ByteBuffer

根据上面的页面,我应该返回一个长度为零的 ByteBuffer,但我不知道如何返回这样的东西。

关于如何返回空字节缓冲区的任何想法?

【问题讨论】:

How much research effort is expected of Stack Overflow users? 答案,“很多。一个荒谬的数量。超过你认为你的能力。在你到达你的绳索的尽头和没有的痛苦之后答案超过了发布您的问题所带来的大量耻辱,那时您可以继续提问。因为到那时,您将完成任何必要的研究,使其成为一个值得提出的好问题。”跨度> 您发布的问题包含您需要的确切代码。 实际上是问题的第二行!到目前为止,您提出的每个java 问题都可以通过阅读javadoc 来解释。 学习使用JavaDoc,然后来这里请别人读给你听。 ByteBuffer.allocate() 我真的很想知道capacity 怎么样 - 新缓冲区的容量,以字节为单位 不是“外行” 术语吗?结合传递0不尖叫零长度ByteBuffer, 【参考方案1】:

由于您将在任何一种情况下都使用 ByteBuffer,因此该方法应该无条件地返回它——返回 null 只会导致您观察到的错误。

为了使这段代码更清晰,我只是将方法返回类型设为void。该方法可以通过调用其上的方法将字节添加到ByteBuffer(或不添加)——这里的返回值实际上是多余的。

【讨论】:

【参考方案2】:

在 else 块中使用下面的语句来避免 NPE(空指针异常)

return ByteBuffer.allocate(0);

【讨论】:

以上是关于最后一个值为空时的ByteBuffer翻转[重复]的主要内容,如果未能解决你的问题,请参考以下文章

数据绑定值为空时如何在 DataGridViewComboBoxColumn 中显示文本

值为空时Chrome中的HTML输入光标位置问题

显示“这是啥?” UITableViewController 为空时的消息

参数为空时的Spring Cloud feign行为

强制值为空时无法引发 VALUE_ERROR

当搜索条件值为空时,查询计划显示 99% 的键查找