为什么ByteBuffer类没有提供读取写布尔数据类型的方法,有没有解决方法?
答案 0 :(得分:5)
Boolean
是1位数据类型。 ByteBuffer
适用于字节。你必须自己决定如何将一个布尔表示为一个字节(例如0表示false,1表示true,0表示false,非0表示true)。
答案 1 :(得分:3)
关于如何编写布尔值没有标准。有任意数量的解决方法,例如写0或1,0或-1,n
或y
,f
或T
,或字符串“false”或“真的“,或者你喜欢什么。或者正如其他人建议您可能只想写一个位而不是使用一个或多个字节。
答案 2 :(得分:2)
这是因为布尔(1位)是唯一的小于的普通旧数据数据类型,而不是字节(8位)。
所以你有动力为了效率而打包布尔。但是最好留给用户的技术。
答案 3 :(得分:2)
因为在线上所以不存在布尔数据类型。只有字节,可以被视为(a)布尔,(b)ASCII序列,(c)一次作为短路2,(d)一次4作为整数,(e)取8很长一段时间,......
答案 4 :(得分:0)
DataOutputStream
有writeBoolean(boolean v)
方法。
在内部,它write(v ? 1 : 0)
。使用此约定,您的代码看起来像
boolean v = <true|false>....
byteBuffer.put(v ? (byte)1 : (byte)0);