### Question:
ColumnDecoder extends Decoder { @Override public long readLong() throws IOException { byte[] b = new byte[8]; dataIn.readFully(b); return Bytes.toLong(b); } ColumnDecoder(InputStream in); @Override void readNull(); @Override boolean readBoolean(); @Override int readInt(); @Override long readLong(); @Override float readFloat(); @Override double readDouble(); @Override Utf8 readString(Utf8 old); @Override String readString(); @Override void skipString(); @Override ByteBuffer readBytes(ByteBuffer old); @Override void skipBytes(); @Override void readFixed(byte[] bytes, int start, int length); @Override void skipFixed(int length); @Override int readEnum(); @Override long readArrayStart(); @Override long arrayNext(); @Override long skipArray(); @Override long readMapStart(); @Override long mapNext(); @Override long skipMap(); @Override int readIndex();  }### Answer:
@Test public void testDecodeLong() throws Exception { InputStream in = new ByteArrayInputStream(new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01 }); Decoder decoder = new ColumnDecoder(in); long i = decoder.readLong(); assertEquals(1L, i); in = new ByteArrayInputStream(new byte[] { (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff }); decoder = new ColumnDecoder(in); i = decoder.readLong(); assertEquals(-1L, i); in = new ByteArrayInputStream(new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 }); decoder = new ColumnDecoder(in); i = decoder.readLong(); assertEquals(0L, i); }