主要用途将c#的类数据保存为二进制文件,包含基本值类型和数组,字符串等。还有的三个指针数据操作类FakeStruct,FakeStructArray,FakeStringArray
我做过的项目,里面的UI的布局数据,kcp网络通信等都是使用DataBuffer打包的。当你的数据写完后调用ToBytes()函数,数据还原时直接使用构造函数public unsafe DataBuffer(byte[] dat)
写个示例
public unsafe struct TextData
{
public bool alignByGeometry;
public TextAnchor alignment;
public Int32 fontSize;
public FontStyle fontStyle;
public HorizontalWrapMode horizontalOverflow;
public float lineSpacing;
public bool resizeTextForBestFit;
public Int32 resizeTextMaxSize;
public Int32 resizeTextMinSize;
public bool supportRichText;
public Color color;
public VerticalWrapMode verticalOverflow;
public Int32 font;
public Int32 text;
public Int32 shader;
public Int32 ex;
public static int Size = sizeof(TextData);
public static int ElementSize = Size / 4;
}
DataBuffer buffer = new DataBuffer();
FakeStruct fake = new FakeStruct(buffer, TextData.ElementSize);
TextData* data = (TextData*)fake.ip;
data->alignByGeometry = txt.alignByGeometry;
data->alignment = txt.alignment;
data->fontSize = txt.fontSize;
data->fontStyle = txt.fontStyle;
data->horizontalOverflow = txt.horizontalOverflow;
data->lineSpacing = txt.lineSpacing;
data->resizeTextForBestFit = txt.resizeTextForBestFit;
data->resizeTextMaxSize = txt.resizeTextMaxSize;
data->resizeTextMinSize = txt.resizeTextMinSize;
data->supportRichText = txt.supportRichText;
data->verticalOverflow = txt.verticalOverflow;
data->color = txt.color;
data->text = buffer.AddData(txt.text);
if (txt.font != null)
data->font = buffer.AddData(txt.font.name);
if (txt.material != null)
data->shader = buffer.AddData(txt.material.shader.name);
buffer.fakeStruct=fake;
var dat = buffer.ToBytes();
恢复时
var buffer=new DataBuffer(dat);
data = *(TextData*)buffer.fakeStruct.ip;
string shader = buffer.GetData(data.shader) as string;
string text= buffer.GetData(data.text) as string;
string fontName = buffer.GetData(data.font) as string;
还支持泛型值类型数组
var index = DataBuffer.AddArray<Vector3>(new Vector3[66]);
Vector3[] buf = DataBuffer.GetArray<Vector3>(index);