微信网站平台建设,深圳高端网站制作价格,asp.ne手机触摸网站开发,网站设计中搜索界面怎么做经过前面两篇博客的介绍#xff0c;相信对于 JavaStruct 的认识以及编程使用#xff0c;读者已经有一定的基础了。只要理解和实践结合起来#xff0c;掌握还是很容易的。下面进行一些数组使用方面的实例说明及演示。
在结构体类中使用数组有几种方式#xff0c;可以使用静…经过前面两篇博客的介绍相信对于 JavaStruct 的认识以及编程使用读者已经有一定的基础了。只要理解和实践结合起来掌握还是很容易的。下面进行一些数组使用方面的实例说明及演示。
在结构体类中使用数组有几种方式可以使用静态指定大小的方式也可以通过使用 ArrayLengthMaker 进行动态分配。数组的大小既可以在类中定义也可以在定义对象后通过对象进行指定。
静态指定方法
如下所示 StructClass public class ArrayStruct { StructField(order 0) public byte[] b new byte[4];StructField(order 1)public char[] c new char[2];StructField(order 2)public short[] s;StructField(order 3)public int[] i;}public void ArraysTest() {ArrayStruct arr new ArrayStruct();Arrays.fill(arr.b, (byte) 1);Arrays.fill(arr.c, (new String(我)).charAt(0));arr.s new short[0];arr.i new int[0];try {byte[] b JavaStruct.pack(arr);for (int i 0; i b.length; i) {System.out.printf(b[%d]: %d\n, i, b[i]);}ArrayStruct arr2 new ArrayStruct();arr2.s new short[0];arr2.i new int[0];JavaStruct.unpack(arr2, b);System.out.println(arr2.b: Arrays.toString(arr2.b));System.out.println(arr2.c: Arrays.toString(arr2.c));} catch (StructException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String args[]) {test t new test();t.ArraysTest();} 输出结果如下 Note在数组中未分配空间的数组一定要在定义对象后分配空间不然会报空指针错误。其次解析与反解析要注意定义的数组大小匹配这一点也要切记不然会报错。与 C 中结构体不同的是类中指定大小后可以创建对象后再重新分配数组大小。这时数组大小就以重分配大小为准这也是一种灵活性的体现。当然原理就是类定义是不占用内存空间的只有定义对象后才有对应空间存在。
动态分配方法 通过使用 ArrayLengthMaker 的方式javastruct 可以在打包及解包操作中操作数组字段时自动使用长度字段中的值。直接看如下实例 StructClasspublic class AString {StructField (order 0 )ArrayLengthMarker (fieldName chars)public int length;StructField (order 1)public char[] chars;public AString(String content){this.length content.length();this.chars content.toCharArray();}}public void TestAString() {//构造 str 对象时执行相应构造方法后长度字段为4。AString str new AString(我爱中国);try {byte[] b JavaStruct.pack(str, ByteOrder.BIG_ENDIAN);for (int i 0; i b.length; i) {System.out.printf(b[%d]: %d\n, i, b[i]);}AString str2 new AString();JavaStruct.unpack(str2, b, ByteOrder.BIG_ENDIAN);System.out.println(str2: str2.length);System.out.println(str2: Arrays.toString(str2.chars));} catch (StructException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String args[]) {test t new test();t.TestAString();}输出结果如下 可以看到对象共占有12个字节的空间长度为int型占4个字节。后面的 char 型数组共占8个字节可确认其长度为4。以上示例即为完整的打包与解包过程了。 关于 JavaStruct 应用的文章系列可以移步至如下链接
1. 《Java 结构体之 JavaStruct 使用教程一 初识 JavaStruct》
2. 《Java 结构体之 JavaStruct 使用教程二 JavaStruct 用例分析》
3. 《Java 结构体之 JavaStruct 使用教程三 JavaStruct 数组进阶》 有任何疑问或使用问题可以给我评论或者邮件哦觉得有用就点赞吧~:-D