簡體   English   中英

Java中的字節數?

[英]Bytes in Java?

感謝上述所有答案,但僅給出一個我想做的事情並沒有真正幫助我:我正在為某種具有不同字段(字節長度不同)的數據包編碼

所以field1是2個字節長field2是3個字節長field3是6個字節長,當我將這些字段加起來時,我應該得到11個字節的長度...

但是我不知道如何聲明這個字節長的東西...

請幫助...提前感謝

使用數組:

byte[] byteArray = new byte[11];

怎么樣:

byte[] arr = new byte[11];

您可以使用一個類來表示您的數據包:

public class Packet
{
   public byte[] Field1, Field2, Field3;

   public Packet(byte[] packetBytes) 
   {
      ByteBuffer packet = ByteBuffer.wrap(packetBytes);
      Field1 = new byte[2];
      Field2 = new byte[3];
      Field3 = new byte[6];
      packet.get(Field1, 0, 2);
      packet.get(Field2, 2, 3);
      packet.get(Field3, 5, 6);
   }
}

ByteBuffer非常適合字節操作。

我發現java.nio.ByteBuffer通常更適合這種情況。 它具有處理緩沖區中字節的好方法。 文檔在這里

import java.nio.ByteBuffer;

ByteBuffer buffer = ByteBuffer.allocate(11);

getChar()出文檔並查看不錯的方法,例如getInt()getChar()

Java具有有限的原始類型集合,所有原始類型均具有固定大小。 您可以在此處查看它們的列表。 這意味着您無法確定變量將包含多少字節。

當然,正如其他人已經提到的那樣,您始終可以創建一個new byte[11] 注意,Java的byte是帶符號的。 從-128到127,而不是從0到255。

我推薦Javolution中的實用程序類來處理諸如此類的二進制協議流。 在處理低級二進制流時,它們對我來說很方便。

您可能應該設計代碼,以將要在Java中處理的消息與需要讀取/寫入的線路級別格式分開。

例如,如果您有ScreenResolution概念,則可以使用ScreenResolution類在Java中表示它:

public class ScreenResolution {
   public int height;
   public int width;
}

該類在Java中易於使用。 根據某種文件格式或協議將其轉換為可以在網絡上傳輸/保存到文件等的分組是另一個問題。 假設高度和寬度分別以3個字節布置,並為“ wire format”添加一些ID和長度,則您將

public byte[] marshalScreenResolution(ScreenResolution obj) {
   byte[] buf = new byte[9];
 //length of this packet, 2 bytes
   buf[0] = 0;
   buf[1] = 9;
   buf[2] = SCREENRESOLUTION_OPCODE;
   //marshal the height/width , 3 least significant bytes.
   buf[3] = (obj.height&0xff0000) >> 16;
   buf[4] = (obj.height&0x00ff00) >> 8;
   buf[5] = (obj.height&0x0000ff) ;
   buf[6] = (obj.width&0xff0000) >> 16;
   buf[7] = (obj.width&0x00ff00) >> 8;
   buf[8] = (obj.width&0x0000ff) ;

   return buf;
}

然后,您創建了一個demarshalScreenResolution函數,用於從數據包轉到ScreenResolution對象。 關鍵是您將java中的表示形式與外部表示形式分離,然后使用字節+一些基本的位組合來組合外部表示形式中的字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM