package js.tinyvm.io;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* Basic byte writer implementation (write order independant part)
*/
public abstract class ByteWriter implements IByteWriter
{
/**
* Data output stream used for writing.
*/
private DataOutputStream _out;
/**
* Constructor.
*
* @param stream stream to write to
*/
public ByteWriter (OutputStream stream)
{
_out = new DataOutputStream(stream);
}
//
// java write order
//
public void writeBoolean (boolean aBoolean) throws IOException
{
// debug(1, aBoolean? 1 : 0);
_out.writeBoolean(aBoolean);
}
public void writeByte (int aByte) throws IOException
{
// debug(1, aByte);
_out.writeByte(aByte);
}
public void writeChar (int aChar) throws IOException
{
// debug(2, aChar);
_out.writeChar(aChar);
}
public void writeShort (int aShort) throws IOException
{
// debug(2, aShort);
_out.writeShort(aShort);
}
public void writeInt (int aInt) throws IOException
{
// debug(4, aInt);
_out.writeInt(aInt);
}
public void writeLong (long aLong) throws IOException
{
// debug(8, aLong);
_out.writeLong(aLong);
}
public void writeFloat (float aFloat) throws IOException
{
// debug(4, Float.floatToIntBits(aFloat));
_out.writeFloat(aFloat);
}
public void writeDouble (double aDouble) throws IOException
{
// debug(8, Double.doubleToLongBits(aDouble));
_out.writeDouble(aDouble);
}
//
// Direct byte writing interface
//
public void write (byte[] aBytes) throws IOException
{
// debug(aBytes);
_out.write(aBytes, 0, aBytes.length);
}
public void write (int aByte) throws IOException
{
// debug(1, aByte);
_out.write(aByte);
}
/**
* Current offset in file.
*/
public int offset ()
{
return _out.size();
}
//
// debug
//
/* protected void debug (byte[] bytes)
{
String offset = "00000000" + Integer.toHexString(offset());
offset = offset.substring(offset.length() - 4);
System.out.println(offset + ": " + bytes.length + " bytes");
System.out.flush();
}
protected void debug (int width, long aValue)
{
String offset = "00000000" + Integer.toHexString(offset());
offset = offset.substring(offset.length() - 4);
String value = "0000000000000000" + Long.toHexString(aValue);
value = value.substring(value.length() - width * 2);
System.out.println(offset + ": " + value);
System.out.flush();
}*/
}