Redian新闻
>
read4 / read4k 实现readAny复杂吗?
avatar
read4 / read4k 实现readAny复杂吗?# JobHunting - 待字闺中
c*d
1
前几天看这里讨论说用read4/read4k实现readAny边界条件比较多容易出错, 今天写了
一下,发现没什么边界条件啊。大牛看看哪里可能出问题。
用javascript写的,不过基本语法和c/java没啥区别。就这两行可能比较拗口:
var args = [bytes, 0].concat(store.splice(0, numToCopy));
[].splice.apply(buf, args);
它做的无非就是从store数组里刨去前numToCopy个元素,再把他们append到buf数组。
readAny函数在这里。完整的带unit test和mock read4()的code在 https://gist.
github.com/dumpty/7176257。可以用node执行,或者直接考到chrome dev console里
运行。
var readAny = (function() {
var store = [];
return function(n, buf) {
if (n <= 0) return 0;
var bytes = 0;
if (store.length == 0) read4(store);
while (bytes < n) {
var leftover = store.length;
if (leftover > 0) {
var numToCopy = Math.min(n - bytes, leftover);
var args = [bytes, 0].concat(store.splice(0, numToCopy));
[].splice.apply(buf, args);
bytes += numToCopy;
if (store.length == 0) read4(store);
} else break;
}
return bytes;
}
})();
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。