@Override public int readUByte() { checkAvaliable(1); byte[] data = new byte[1]; readFully(data, 0, 1); if (data[0] >= 0) return data[0]; return data[0] + 256; } }
@Override public void readFully(byte[] buf, int off, int len) { if (len < 0) { throw new RuntimeException("Can't read negative number of bytes"); } checkAvaliable(len); int read = 0; while(read < len) { if(_buffer == null || _buffer.remaining() == 0) { _current_block_count++; _buffer = _data.next(); } int limit = Math.min(len-read, _buffer.remaining()); _buffer.get(buf, off+read, limit); _current_offset += limit; read += limit; } }
@Override public short readShort() { checkAvaliable(SHORT_SIZE); byte[] data = new byte[SHORT_SIZE]; readFully(data, 0, SHORT_SIZE); return LittleEndian.getShort(data); }
@Override public int readInt() { checkAvaliable(INT_SIZE); byte[] data = new byte[INT_SIZE]; readFully(data, 0, INT_SIZE); return LittleEndian.getInt(data); }
@Override public long readLong() { checkAvaliable(LONG_SIZE); byte[] data = new byte[LONG_SIZE]; readFully(data, 0, LONG_SIZE); return LittleEndian.getLong(data, 0); }
@Override public int readUShort() { checkAvaliable(SHORT_SIZE); byte[] data = new byte[SHORT_SIZE]; readFully(data, 0, SHORT_SIZE); return LittleEndian.getUShort(data); }
@Override public int readUByte() { checkAvaliable(1); byte[] data = new byte[1]; readFully(data, 0, 1); if (data[0] >= 0) return data[0]; return data[0] + 256; } }
@Override public void readFully(byte[] buf, int off, int len) { if (len < 0) { throw new RuntimeException("Can't read negative number of bytes"); } checkAvaliable(len); int read = 0; while(read < len) { if(_buffer == null || _buffer.remaining() == 0) { _current_block_count++; _buffer = _data.next(); } int limit = Math.min(len-read, _buffer.remaining()); _buffer.get(buf, off+read, limit); _current_offset += limit; read += limit; } }
@Override public long readLong() { checkAvaliable(LONG_SIZE); byte[] data = new byte[LONG_SIZE]; readFully(data, 0, LONG_SIZE); return LittleEndian.getLong(data, 0); }
@Override public int readInt() { checkAvaliable(INT_SIZE); byte[] data = new byte[INT_SIZE]; readFully(data, 0, INT_SIZE); return LittleEndian.getInt(data); }
@Override public short readShort() { checkAvaliable(SHORT_SIZE); byte[] data = new byte[SHORT_SIZE]; readFully(data, 0, SHORT_SIZE); return LittleEndian.getShort(data); }
@Override public int readUShort() { checkAvaliable(SHORT_SIZE); byte[] data = new byte[SHORT_SIZE]; readFully(data, 0, SHORT_SIZE); return LittleEndian.getUShort(data); }