2

为什么ByteBuffer类不提供读写布尔数据类型的方法,有什么解决方法吗?

4

5 回答 5

5

Boolean是 1 位数据类型。ByteBuffer适用于字节。您必须自己决定如何将布尔值表示为一个字节(例如 0 表示假,1 表示真,或 0 表示假,非零表示真)。

于 2013-09-16T10:07:08.860 回答
3

关于如何编写布尔值没有标准。有许多变通方法,例如写 0 或 1、0 或 -1、nyfT、或字符串“false”或“true”,或任何你喜欢的。或者正如其他人所建议的那样,您可能只想写一位而不是使用一个或多个字节。

于 2013-09-16T10:19:10.023 回答
2

这是因为布尔(1 位)是唯一小于字节(8 位)的普通旧数据类型。

因此,您有动力打包布尔值以提高效率。但是这方面的技术最好留给用户。

于 2013-09-16T10:10:14.320 回答
2

因为网络上没有布尔数据类型之类的东西。只有字节,可以被视为(a)布尔值,(b)ASCII序列,(c)一次取2个作为短裤,(d)一次取4个作为整数,(e)取8个只要时间,...

于 2013-09-16T10:13:35.627 回答
0

DataOutputStream一个writeBoolean(boolean v)方法。

在内部,它确实如此write(v ? 1 : 0)。使用这个约定,你的代码看起来像

boolean v = <true|false>....
byteBuffer.put(v ? (byte)1 : (byte)0);
于 2018-03-28T18:33:36.100 回答