BigInteger low = BigInteger.ONE;
BigInteger high = BigInteger.ONE;
try {
ByteBuffer buffer = ByteBuffer.allocate(4);
buffer.putInt(this.howMany);
buffer.flip();
while (buffer.hasRemaining()) out.write(buffer);
for (int i = 0; i < howMany; i++) {
byte[] data = low.toByteArray();
// These numbers can become arbitrarily large, and they grow
// exponentially so no fixed size buffer will suffice.
buffer = ByteBuffer.allocate(4 + data.length);
buffer.putInt(data.length);
buffer.put(data);
buffer.flip();
while (buffer.hasRemaining()) out.write(buffer);
// find the next number in the series
BigInteger temp = high;
high = high.add(low);
low = temp;
}
out.close();
System.err.println("Closed");
}
catch (IOException ex) {
System.err.println(ex);
}