code: @Override
    public void readExternal(ObjectInput in) throws IOException {
      b = new double[in.readInt()];
      for (int p = 0; p < b.length; p++) {
        b[p] = in.readDouble();
      }
    }
docs: The object implements the readExternal method to restore its
  contents by calling the methods of DataInput for primitive
  types and readObject for objects, strings and arrays.  The
  readExternal method must read the values in the same sequence
  and with the same types as were written by writeExternal.
  
  @param in the stream to read data from in order to restore the object