package org.herac.tuxguitar.io.gtp; import java.io.IOException; import java.io.OutputStream; import org.herac.tuxguitar.io.base.TGOutputStreamBase; import org.herac.tuxguitar.song.factory.TGFactory; public abstract class GTPOutputStream extends GTPFileFormat implements TGOutputStreamBase{ private OutputStream outputStream; public GTPOutputStream(GTPSettings settings){ super(settings); } public void init(TGFactory factory,OutputStream stream) { super.init(factory); this.outputStream = stream; } protected void skipBytes(int count) throws IOException { for(int i = 0;i < count;i++){ this.outputStream.write(0); } } protected void writeByte(byte v) throws IOException { this.outputStream.write(v); } protected void writeUnsignedByte(int v) throws IOException { this.outputStream.write(v); } protected void writeBytes(byte[] v) throws IOException { this.outputStream.write(v); } protected void writeBoolean(boolean v) throws IOException { this.outputStream.write(v ? 1 : 0); } protected void writeInt(int v) throws IOException { byte[] bytes = { (byte)(v & 0x00FF),(byte)((v >> 8) & 0x000000FF),(byte) ((v >> 16) & 0x000000FF),(byte)((v >> 24) & 0x000000FF) }; this.outputStream.write(bytes); } protected void writeString(byte[] bytes, int maximumLength) throws IOException { int length = (maximumLength == 0 || maximumLength > bytes.length ? bytes.length : maximumLength ); for(int i = 0 ; i < length; i ++){ this.outputStream.write( bytes[ i ] ); } } protected void writeStringInteger(String string, String charset) throws IOException { byte[] bytes = string.getBytes(charset); this.writeInt( bytes.length ); this.writeString( bytes , 0 ); } protected void writeStringInteger(String string) throws IOException { this.writeStringInteger(string, getSettings().getCharset()); } protected void writeStringByte(String string, int size, String charset) throws IOException { byte[] bytes = string.getBytes(charset); this.writeByte( (byte)( size == 0 || size > bytes.length ? bytes.length : size )); this.writeString( bytes , size ); this.skipBytes( size - bytes.length ); } protected void writeStringByte(String string, int size) throws IOException { this.writeStringByte(string, size, getSettings().getCharset()); } protected void writeStringByteSizeOfInteger(String string, String charset) throws IOException { byte[] bytes = string.getBytes(charset); this.writeInt( (bytes.length + 1) ); this.writeStringByte(string, bytes.length, charset); } protected void writeStringByteSizeOfInteger(String string) throws IOException { writeStringByteSizeOfInteger(string, getSettings().getCharset()); } protected void close() throws IOException{ this.outputStream.flush(); this.outputStream.close(); } }