The Java Program: PointPack.java

  1 // PointPack.java -- convert/unconvert point to bytes
  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];  // point fits in two words
 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 }