Необходимо создать класс в Java, как структура в C - PullRequest
1 голос
/ 11 апреля 2011

У меня есть структура в "C", подобная этой.

typedef struct SKT_SubHeader_s
{
        U32 subLength;
        U8 subCode;
        U8 subType;
        U8 subResult;
        U8 subCause;
        U8 subSrcMSISDN[RBT_SUBSCRIBER_NO_LEN];
        U8 subDstMSISDN[RBT_SUBSCRIBER_NO_LEN];
        S8 subRsv[20];
        S16 subSrvType;
        S16 subSrvId;
        S16 subSndType;
        S16 subSndIdx;
        S8 subSndCode[RBT_TONE_ID_LEN];
        S8 subSndValue[RBT_TONE_ID_LEN];
        S32 subMsgId;
        U8 subBillFlag;
        S16 subGroupOrder;
        S8 subDate[9];
        S8 subGroupName[31];
        U8 subSpFlag;
        S8 subBillCode[21];
        S8 subReserve[30];
        U32 bodyLength;
        SKT_body_t bodyData[1];
}SKT_SubHeader_t;

Мне нужно создать тот же тип Java-класса, к значению которого я могу получить доступ извне и могу писать в файл.

Ответы [ 5 ]

4 голосов
/ 11 апреля 2011

Создайте объект этого класса, и вы сможете получить доступ к каждому члену.

Main.java

Skt_Subheader_s SKT_SubHeader_t = new SKT_SubHeader_s;
SKT_SubHeader_t.subLength = 10;

SKT_SubHeader_s.java

public class SKT_SubHeader_s
{
   public int subLength;
   public byte subCode;
   public byte subType;
   public byte subResult;
   public byte subCause;
   public byte subSrcMSISDN[RBT_SUBSCRIBER_NO_LEN];
   public byte subDstMSISDN[RBT_SUBSCRIBER_NO_LEN];
   public byte subRsv[20];
   public string subSrvType;
   public string subSrvId;
   public string subSndType;
   public string subSndIdx;
   public string subSndCode[RBT_TONE_ID_LEN];
   public string subSndValue[RBT_TONE_ID_LEN];
   public string subMsgId;
   public byte subBillFlag;
   public string subGroupOrder;
   public string subDate[9];
   public string subGroupName[31];
   public byte subSpFlag;
   public string subBillCode[21];
   public byte subReserve[30];
   public int bodyLength;
   public SKT_body_t bodyData[1]; 

   public SKT_Subheader_s()
   {
      //Constructor, Initialize your variables here
      //e.g.
      // sublength = 0;
      //etc...
   }
}
3 голосов
/ 11 апреля 2011

Мне кажется, вам просто нужно создать класс, который имеет эти типы данных в качестве открытых переменных.Вы также можете инициализировать переменные в конструкторе.

Кроме того, в Java более распространено иметь переменные в классе, подобном этому, в private и просто публично выставлять getters и setters.

1 голос
/ 11 апреля 2011

Возможно, вы можете просто использовать массив byte[] для хранения этих структурированных данных и использовать java.nio.ByteBuffer для обертывания и манипулирования ими.

0 голосов
/ 11 апреля 2011

Вам нужен класс Java с открытыми членами.

0 голосов
/ 11 апреля 2011

Java не имеет эквивалента struct. Вы должны создать class для представления вашего struct. Хороший подход заключается в создании Java Bean . Ваши элементы struct становятся частными полями, и затем вы создаете методы получения (и установки) для доступа к ним (их изменения). Вам также следует создать соответствующий конструктор для вашего класса, в зависимости от того, как вы хотите инициализировать объект такого класса.

A примечание о примитивных типах данных: я не на 100% уверен, что U32, U8, S16 и т. Д. Представляют в вашем коде, но вы должны взглянуть Типы данных Java Primitive , чтобы быть уверенным, что вы можете отобразить их правильно. Например, помните, что Java не поддерживает целые числа без знака (см. здесь ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...