我们有一个文件,其中包含特定格式的字节数组,例如标题,然后是数据。这个文件是由另一个java程序生成的,然后我们通过另一个java程序以与它相同的格式读取同一个文件。如何将负字节值转换为short或integer?
这是使该文件的程序,填充lengthOfKey
为字节这是正确的因为这是我们需要的,如下图所示。现在
for (Map.Entry<byte[], byte[]> entry : holder.entrySet()) {
byte typeKey = 0;
// getting the key length as byte (that's what we need to do)
byte lengthOfKey = (byte) entry.getKey().length;
byte[] actualKey = entry.getKey();
}
为byte
只能存储最大值为127
,我们看到了一些我们的纪录,而我们读取文件lengthOfKey
就要为负的,如下图所示:
程序,该程序读取文件:
byte keyType = dis.readByte();
// for some record this is coming as negative. For example -74
byte lengthOfKey = dis.readByte();
现在我的问题是:有什么办法,我可以找出是因为它得到了转化为重点的实际长度编写它时写上-74
。我的意思是它应该大于127
,这就是为什么它被转换为-74
,但实际价值是多少?
我想的问题是如何负字节值转换为短或整数?我只是想验证一下,看看密钥的实际长度是多少,因为密钥已经转换为负值。
感谢您的解释。我能够解码数据,我可以看到它的实际长度。你能解释我为什么这么说吗? '如果来自entry.getKey()。length的原始长度大于255,则实际长度信息将丢失。“以及为什么它会丢失?只是为了我的理解目的。 – john
如果您收到了长度为0的字符,那么它在256字节的'byte“形式中是无法区分的。二进制中的“0”是00000000,二进制中的“256”是1 00000000,但当发生缩小转换为“字节”时丢失“1”,并且它显示为“0”。 – rgettman