Node.js缓冲区-读取字节

时间:2019-10-18 07:21:46

标签: node.js callback buffer protocol-buffers

代码挑战

给出

给出了具有以下读取操作的工业协议

/ ** *从给定位置开始读取特定数量的字节的操作

  • 并使用读取的有效负载执行提供的回调

  • @param start起始寄存器

  • @param长度要读取的字节数(重要:最大长度为10!)

  • @param回调回调接收Buffer类型的读取有效负载作为参数 * /

        industrialProtocol.read(start, length, callback)
        e.g. industrialProtocol.read(3, 1, callback) => callback(err, payload)
    

读取功能提供对使用此协议的任何设备的数据段的访问。

假定具有4096字节的数据段表示如下: Data segment 0 1个 2 3 4 …。 4096字节

实施

请实现一种算法,该算法将从设备读取多个值,并将其以最有效的方式提供给相应的回调函数。您建立的功能应该易于使用,例如在对感兴趣的寄存器进行定期轮询的情况下。我们认为读取功能是缓慢且昂贵的,因此请尝试将读取功能的调用量减至最少,并将多个读取聚合为更少的读取。

/ ** * *

* @param inputList List of values to read: [{3, 2, callbackA}, {4, 1, 
    callbackB}]
    * [{start, length, callback}, ….]
    */
    yourFunction(inputList)
    Example aggregation:
    inputList = [{3, 1, cb1}, {4, 1, cb2}]
    ➔ industrialProtocol.read(3, 1, cb1) & industrialProtocol.read(4, 1, cb2)
    ➔ Aggregation: industrialProtocol.read(3, 2) ➔ cb1(payload1) & cb2(payload2)

确保使用正确的有效负载调用每个回调。

我的汇总读取解决方案是

exports.getAggregateRead = (inputList) => {
  // var inputList = [{start: 3, length: 1 }, { start: 4, length: 8}];
  var startRegisterArray = inputList.map(input => {
    return input.start;
  });

  var endRegisterArray = inputList.map(input => {
    return input.start + input.length;
  });

  var aggregrateRead = {};
  aggregrateRead.start = Math.min(...startRegisterArray);
  aggregrateRead.length = Math.max(...endRegisterArray) - aggregrateRead.start;
  return aggregrateRead;
}

但是,我对Node.js缓冲区不熟悉,也不知道如何继续进行下一步。任何线索都将有所帮助。

我已经没有通过代码挑战,所以这不是在作弊,而是为下一个做准备。

0 个答案:

没有答案