提交 7e3c386e 编写于 作者: H Heejae Chang

support byte and char array natively in ObjectReader/Writer

上级 2317ddee
......@@ -335,6 +335,18 @@ private Array ReadArray(DataKind kind)
}
Type elementType = this.ReadType();
// optimizations for supported array type by binary reader
if (elementType == typeof(byte))
{
return _reader.ReadBytes(length);
}
if (elementType == typeof(char))
{
return _reader.ReadChars(length);
}
Array array = Array.CreateInstance(elementType, length);
for (int i = 0; i < length; i++)
{
......@@ -353,6 +365,17 @@ private Type ReadType()
private Type ReadType(DataKind kind)
{
// optimization for primitive types
if (kind == DataKind.UInt8)
{
return typeof(byte);
}
if (kind == DataKind.Char)
{
return typeof(char);
}
switch (kind)
{
case DataKind.TypeRef_B:
......
......@@ -472,7 +472,21 @@ private void WriteArray(Array instance)
break;
}
this.WriteType(instance.GetType().GetElementType());
var elementType = instance.GetType().GetElementType();
this.WriteType(elementType);
// optimizations for supported array type by binary writer
if (elementType == typeof(byte))
{
_writer.Write((byte[])instance);
return;
}
if (elementType == typeof(char))
{
_writer.Write((char[])instance);
return;
}
for (int i = 0; i < length; i++)
{
......@@ -482,6 +496,19 @@ private void WriteArray(Array instance)
private void WriteType(Type type)
{
// optimization. primitive types
if (type == typeof(byte))
{
_writer.Write((byte)DataKind.UInt8);
return;
}
if (type == typeof(char))
{
_writer.Write((byte)DataKind.Char);
return;
}
int id;
if (_dataMap.TryGetId(type, out id))
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册