dataCmd.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. var fs = require('fs');
  2. /**
  3. * 对数据Buffer的操作类
  4. * @param {buffer} buffer 数据文件的buffer
  5. */
  6. function bufferCmd(path) {
  7. var buffer = fs.readFileSync(path);
  8. var max = buffer.length;
  9. var api = {
  10. readBuffer: function(start, length) {
  11. start = start || 0;
  12. length = length || 1;
  13. return buffer.slice(start, start + length);
  14. },
  15. readUIntLE: function(start, length) {
  16. start = start || 0;
  17. length = length < 1 ? 1 : length > 6 ? 6 : length;
  18. return buffer.readUIntLE(start, length);
  19. },
  20. getStringByteArray: function(start) {
  21. var B = start || 0;
  22. var toarr = [];
  23. for (var i = B; i < max; i++) {
  24. var s = buffer[i];
  25. if (s === 0) break;
  26. toarr.push(s);
  27. }
  28. return toarr;
  29. },
  30. close: function() {}
  31. // dispose: function() {
  32. // buffer = null;
  33. // }
  34. };
  35. return function bufferCmd() {
  36. return api;
  37. };
  38. }
  39. /**
  40. * 对数据文件的操作类
  41. * @param {string} path 文件地址
  42. */
  43. function fileCmd(path) {
  44. return function fileCmd() {
  45. var fd, max;
  46. function open() {
  47. fd = fs.openSync(path, 'r');
  48. max || (max = fs.fstatSync(fd).size);
  49. }
  50. open();
  51. return {
  52. name: 'bufferCmd',
  53. readBuffer: function(start, length) {
  54. start = start || 0;
  55. length = length || 1;
  56. var buf = Buffer.alloc(length);
  57. // fd || open();
  58. fs.readSync(fd, buf, 0, length, start);
  59. return buf;
  60. },
  61. readUIntLE: function(start, length) {
  62. start = start || 0;
  63. length = length < 1 ? 1 : length > 6 ? 6 : length;
  64. return this.readBuffer(start, length).readUIntLE(0, length);
  65. },
  66. getStringByteArray: function(start) {
  67. var B = start || 0;
  68. var toarr = [];
  69. for (var i = B; i < max; i++) {
  70. var s = this.readBuffer(i, 1)[0];
  71. if (s === 0) break;
  72. toarr.push(s);
  73. }
  74. return toarr;
  75. },
  76. close: function() {
  77. if (fd != null) {
  78. fs.closeSync(fd);
  79. fd = null;
  80. }
  81. }
  82. };
  83. };
  84. }
  85. module.exports = {
  86. bufferCmd: bufferCmd,
  87. fileCmd: fileCmd
  88. };