我需要将大字节数组作为REST服务的响应发送到ajax请求。我正在创建列表:
List<List<Byte>> list = new List<List<byte>>();
这里,内部列表每个都有1000个字节。这是代码:
int cnt = 0;
List<Byte> innerList = new List<Byte>();
for (int i = 0; i < fileBytes.Length; i++)
{
if (cnt < 1000)
{
Byte b = fileBytes[i];
innerList.Add(b);
cnt++;
if (i == fileBytes.Length - 1)
{
list.Add(innerList);
log.Debug("Remaining:");
log.Debug("List: " + list.Count);
log.Debug("innerList: " + innerList.Count);
}
}
else
{
list.Add(innerList);
log.Debug("Remaining:");
log.Debug("List: " + list.Count);
log.Debug("innerList: " + innerList.Count);
innerList.Clear();
cnt = 0;
}
}
return list;
现在,根据log
,我的总计数为list
为503,第一个502计数为1000(这将是innerList
)&amp;在503'中,子列表包含54
个字节。
这是我的ajax请求:
$.ajax({
type: "GET",
dataType: "jsonp",
contentType: "jsonp",
data: dd,
crossDomain: true,
jsonp: "callback",
url: "http://xxx.xxx.xxx.xx/MyWebService/WebService.svc/MyMethod",
success: function (data) {
console.log(data);
},
complete: function (request, textStatus) { //for additional info
alert(request.responseText);
alert(textStatus);
},
error: function(request, textStatus, errorThrown) {
alert(textStatus);
}
});
请求已成功完成,但在firebug
我注意到,我data
中的success
为503
jsons的集合,每个jsons都有54
( !)键。我想我应该在1000
&amp;的前502
个jsons中获得data
个密钥。只有在503'才能得到54把钥匙。我错过了什么吗?
答案 0 :(得分:2)
因为你使用了innerList
的相同实例,最后是54字节长。尝试创建新实例。
例如,尝试innerList.Clear();
innerList = new List<Byte>();
修改
由于您将文件内容作为json传递,我认为性能不是您主要关注的问题。 如果是这样,你可以使用下面的Linq(带副作用),这个更短,更不容易出错
int cnt = 0;
List<List<byte>> chunks = fileBytes
.GroupBy(x => cnt++ / 1000)
.Select(x => x.ToList())
.ToList();