Unity3D BakeMesh 因二进制文件读写字符串的方式导致莫名bug
2015-03-20 09:28
337 查看
由其他人提供的插件,bake mesh
static void writeString(BinaryWriter bw, string str, int cap)
{
var ba = new byte[cap];
var bs = System.Text.Encoding.ASCII.GetBytes(str);
Array.Copy(bs, ba, bs.Length);
bw.Write(ba);
}
直接导致了当字符串过长的时候,内容读取的缺失和后续连锁导致序列化的错误。
解决方案:
1.临时,扩大cap的长度。
2.动态用变长字符串长度而不是用写死的cap。
建议:这种地方应该有Assert(断言)来校验函数参数的有效性。
static void writeString(BinaryWriter bw, string str, int cap)
{
var ba = new byte[cap];
var bs = System.Text.Encoding.ASCII.GetBytes(str);
Array.Copy(bs, ba, bs.Length);
bw.Write(ba);
}
直接导致了当字符串过长的时候,内容读取的缺失和后续连锁导致序列化的错误。
解决方案:
1.临时,扩大cap的长度。
2.动态用变长字符串长度而不是用写死的cap。
建议:这种地方应该有Assert(断言)来校验函数参数的有效性。
相关文章推荐
- 文件读写: 二进制方式和文本方式的区别
- 读写文件编码方式不一致导致文件乱码的解决方案
- C语言读写文件两种方式ASCII 和 二进制。
- 文件读写:fwrite与fprintf的区别(即二进制方式和文本方式的区别)
- 文件读写:fwrite与fprintf的区别(即二进制方式和文本方式的区别)
- 文件读写: 二进制方式和文本方式的区别
- 文件读写: 二进制方式和文本方式的区别
- 《用二进制方式向文件读写一组数据》
- 【C/C++学院】0826-文件重定向/键盘输入流/屏幕输出流/字符串输入输出/文件读写简单操作/字符文件读写二进制与文本差别/get与getline挖掘数据/二进制与文本差别/随机位置/多线程初级
- 字符串和二进制字符串问题以及读写二进制文件
- 文件读写: 二进制方式和文本方式的区别
- 文件读写: 二进制方式和文本方式的区别
- 文件读写:fwrite与fprintf的区别(即二进制方式和文本方式的区别)
- VB ADO 用二进制方式来读写文件 入数据库 __________请参考(把文件(包括图片)存入数据库)
- C语言:用二进制方式向文件读写一组数据(fread、fwrite)
- 文件读写: 二进制方式和文本方式的区别
- 文件读写的文本方式与二进制方式、文本文件与二进制文件之区别
- 文件读写:fwrite与fprintf的区别(即二进制方式和文本方式的区别)
- 文本方式读写文件和以二进制方式
- 【C/C++学院】0826-文件重定向/键盘输入流/屏幕输出流/字符串输入输出/文件读写简单操作/字符文件读写二进制与文本差别/get与getline挖掘数据/二进制与文本差别/随机位置/多线程初级