我們有一個文件,其中包含特定格式的字節數組,例如標題,然後是數據。這個文件是由另一個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