package scouter.util;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
public class DataUtil {
static public int readInt(InputStream in) throws IOException {
int ch1 = in.read();
int ch2 = in.read();
int ch3 = in.read();
int ch4 = in.read();
if ((ch1 | ch2 | ch3 | ch4) < 0)
throw new EOFException();
return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
}
static public void readFully(InputStream in, byte buff[]) throws IOException {
readFully(in, buff, 0, buff.length);
}
static public void readFully(InputStream in, byte buff[], int offset, int length) throws IOException {
if (length < 0)
throw new IndexOutOfBoundsException();
int n = 0;
while (n < length) {
int count = in.read(buff, offset + n, length - n);
if (count < 0)
throw new EOFException();
n += count;
}
}
static public int readUnsignedByte(InputStream in) throws IOException {
int ch = in.read();
if (ch < 0)
throw new EOFException();
return ch;
}
static public int readUnsignedShort(InputStream in) throws IOException {
int ch1 = in.read();
int ch2 = in.read();
if ((ch1 | ch2) < 0)
throw new EOFException();
return (ch1 << 8) + (ch2 << 0);
}
static public long readLong(InputStream in) throws IOException {
byte [] buffer = new byte[8];
readFully(in, buffer, 0, 8);
return (((long)buffer[0] << 56) +
((long)(buffer[1] & 255) << 48) +
((long)(buffer[2] & 255) << 40) +
((long)(buffer[3] & 255) << 32) +
((long)(buffer[4] & 255) << 24) +
((buffer[5] & 255) << 16) +
((buffer[6] & 255) << 8) +
((buffer[7] & 255) << 0));
}
static public byte[] readBlob(InputStream in) throws IOException {
int baselen = readUnsignedByte(in);
switch (baselen) {
case 255: {
int len = readUnsignedShort(in);
byte[] buffer = read(in, len);
return buffer;
}
case 254: {
int len = readInt(in);
byte[] buffer = read(in, len);
return buffer;
}
case 0: {
return new byte[0];
}
default:
byte[] buffer = read(in, baselen);
return buffer;
}
}
static public byte[] read(InputStream in, int len) throws IOException {
byte[] buff = new byte[len];
readFully(in, buff);
return buff;
}
static public String readText(InputStream in) throws IOException {
byte[] buffer = readBlob(in);
return new String(buffer, "UTF8");
}
}