为什么ByteBuffer类不提供读写布尔数据类型的方法,有什么解决方法吗?
问问题
5071 次
5 回答
5
Boolean
是 1 位数据类型。ByteBuffer
适用于字节。您必须自己决定如何将布尔值表示为一个字节(例如 0 表示假,1 表示真,或 0 表示假,非零表示真)。
于 2013-09-16T10:07:08.860 回答
3
关于如何编写布尔值没有标准。有许多变通方法,例如写 0 或 1、0 或 -1、n
或y
、f
或T
、或字符串“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 回答