public override void WriteByteArray(byte[] array) { writer.Write((byte)Datatypes.BYTEARRAY_DATATYPE_V3); writer.WriteVarInt(array.Length << 1 | 0x1); writer.Write(array); }
internal override void WriteCachedObject(object cached) { writer.Write((byte[])cached); }
public static void writeUTF(FlashorbBinaryWriter writer, string content, bool extendedutf) { //int utfLength = UTF8Encoding.UTF8.GetByteCount( content ); byte[] buffer = UTF8Encoding.UTF8.GetBytes(content); if (extendedutf) { writer.WriteVarInt((int)(buffer.Length << 1 | 0x1)); } else { writer.Write((byte)(buffer.Length >> 8 & 0xFF)); writer.Write((byte)(buffer.Length >> 0 & 0xFF)); } if (buffer.Length > 0) { writer.Write(buffer); } /* * //dervived from java class DataOutputStream.writeUTF * int strLength = content.Length; * uint utfLength = 0; * char[] charr = content.ToCharArray(); * int c, count = 0; * * for (int i = 0; i < strLength; i++) * { * c = charr[ i ]; * * if( (c >= 0x0001) && (c <= 0x007F) ) * utfLength++; * else if( c > 0x07FF ) * utfLength += 3; * else * utfLength += 2; * } * * if( !extendedutf && utfLength > 65535 ) * throw new ApplicationException( "utf data format exception" ); * * byte[] bytearr = new byte[ extendedutf ? utfLength : utfLength + 2 ]; * * if( extendedutf ) * { * writer.WriteVarInt( (int) (utfLength << 1 | 0x1) ); * } * else * { * bytearr[ count++ ] = (byte) ( utfLength >> 8 & 0xFF ); * bytearr[ count++ ] = (byte) ( utfLength >> 0 & 0xFF ); * } * * for (int i = 0; i < strLength; i++) * { * c = charr[ i ]; * * if ( (c >= 0x0001) && (c <= 0x007F) ) * { * bytearr[ count++ ] = (byte) c; * } * else if (c > 0x07FF) * { * bytearr[ count++ ] = (byte) (0xE0 | c >> 12 & 0x0F); * bytearr[ count++ ] = (byte) (0x80 | c >> 6 & 0x3F); * bytearr[ count++ ] = (byte) (0x80 | c >> 0 & 0x3F); * } * else * { * bytearr[ count++ ] = (byte) (0xC0 | c >> 6 & 0x1F); * bytearr[ count++ ] = (byte) (0x80 | c >> 0 & 0x3F); * } * } * * writer.Write( bytearr ); * */ }