Skip to content

Instantly share code, notes, and snippets.

@volgar1x
Created November 10, 2012 19:01
Show Gist options
  • Save volgar1x/4052143 to your computer and use it in GitHub Desktop.
Save volgar1x/4052143 to your computer and use it in GitHub Desktop.
package org.mambo.protocol.client.io;
import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
/**
* Created with IntelliJ IDEA.
* User: Blackrush
* Date: 10/11/12
* Time: 18:58
*/
public class BigEndianDataReader implements DataReaderInterface {
public static final Charset CHARSET = Charset.forName("UTF8");
private byte[] data;
private int offset;
public BigEndianDataReader(byte[] data) {
this.data = data;
}
@Override
public int getOffset() {
return offset;
}
@Override
public void setOffset(int offset) {
this.offset = offset;
}
@Override
public byte readByte() {
byte value = data[offset];
offset++;
return value;
}
@Override
public short readUnsignedByte() {
return (short) (readByte() & 0xFF);
}
@Override
public byte[] readBytes(int n) {
byte[] value = new byte[n];
for (int i = 0; i < n; ++i) {
value[i] = readByte();
}
return value;
}
@Override
public short readShort() {
return (short) ((readUnsignedByte() << 8) | readUnsignedByte());
}
@Override
public int readUnsignedShort() {
return (readUnsignedByte() << 8) | readUnsignedByte();
}
@Override
public int readInt() {
return (readUnsignedShort() << 16) | readUnsignedShort();
}
@Override
public long readUnsignedInt() {
return ((long) readUnsignedShort() << 16) | (long) readUnsignedShort();
}
@Override
public long readLong() {
return (readUnsignedInt() << 32) | readUnsignedInt();
}
@Override
public BigInteger readUnsignedLong() {
return BigInteger.ZERO
.add(BigInteger.valueOf(readUnsignedInt())).shiftLeft(32)
.or(BigInteger.valueOf(readUnsignedInt()));
}
@Override
public double readDouble() {
return Double.longBitsToDouble(readLong());
}
@Override
public char readChar() {
return CHARSET.decode(ByteBuffer.wrap(data, offset++, 1)).charAt(0);
}
@Override
public boolean readBoolean() {
return readByte() == 1;
}
@Override
public String readString() {
int length = readUnsignedShort();
byte[] bytes = readBytes(length);
return new String(bytes, CHARSET);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment