The Java Program: PointPack.java
1
2 interface Packable {
3 byte[] pack();
4 void unpack(byte raw[]);
5 }
6 class Point {
7 int x, y;
8 Point(int x, int y) {
9 this.x = x; this.y = y;
10 }
11 }
12 class NewPoint extends Point implements Packable {
13 NewPoint(int x, int y) {super(x, y);}
14 NewPoint() {this(0, 0);}
15 private byte p(int t, int n) {
16 return (byte)((t>>n) & 0xff);
17 }
18 public byte pack()[] {
19 byte ret[] = new byte[8];
20 ret[0]=p(x,24); ret[1]=p(x,16); ret[2]=p(x,8); ret[3]=p(x,0);
21 ret[4]=p(y,24); ret[5]=p(y,16); ret[6]=p(y,8); ret[7]=p(y,0);
22 return ret;
23 }
24 private int u(byte b, int n) {
25 return (b & 0xff) << n;
26 }
27 public void unpack(byte raw[]) {
28 x = u(raw[0], 24) | u(raw[1], 16) | u(raw[2], 8) | u(raw[3], 0);
29 y = u(raw[4], 24) | u(raw[5], 16) | u(raw[6], 8) | u(raw[7], 0);
30 }
31 public String toString() {
32 return "NewPoint[" + x + "," + y + "]";
33 }
34 }
35 class PointPack {
36 public static void main(String args[]) {
37 Packable p = new NewPoint(123456789, 2147483647);
38 byte packed[] = p.pack();
39 NewPoint thawed = new NewPoint();
40 thawed.unpack(packed);
41 System.out.println("p = " + thawed);
42 }
43 }