标题不言而喻.我有一个文件,包含一个base64编码的byte [],可变宽度整数,最小8位,最大32位
我有一个大文件(48MB),我试图找到从流中抓取整数的最快方法.
这是perf应用程序中最快的代码:
static int[] Base64ToIntArray3(string base64,int size) { List<int> res = new List<int>(); byte[] buffer = new byte[4]; using (var ms = new System.IO.MemoryStream(Convert.FromBase64String(base64))) { while(ms.Position < ms.Length) { ms.Read(buffer,size); res.Add(BitConverter.ToInt32(buffer,0)); } } return res.ToArray(); }
我看不到更快的方法将字节填充到32位.任何想法,破坏和chapettes?解决方案应该在c#中.我可以跌到C /如果我必须,但我不想.
解决方法
没有理由使用内存流将字节从数组移动到另一个数组,只需直接从数组中读取.此外,数组的大小是已知的,因此需要将项添加到列表然后转换为数组,您可以从头开始使用数组:
static int[] Base64ToIntArray3(string base64,int size) { byte[] data = Convert.FromBase64String(base64); int cnt = data.Length / size; int[] res = new int[cnt]; for (int i = 0; i < cnt; i++) { switch (size) { case 1: res[i] = data[i]; break; case 2: res[i] = BitConverter.ToInt16(data,i * 2); break; case 3: res[i] = data[i * 3] + data[i * 3 + 1] * 256 + data[i * 3 + 2] * 65536; break; case 4: res[i] = BitConverter.ToInt32(data,i * 4); break; } } return res; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。