【问题标题】:How to chunk string using javascript如何使用 javascript 对字符串进行分块
【发布时间】:2021-03-18 16:49:47
【问题描述】:

我有一个超过 32kb 的字符串需要分块,每个块的大小限制为 32kb。这可能吗?使用 JavaScript ,我只能找到像切割字符串或拆分字符串这样的代码,我认为与我的任务无关

stringChop = function(str, size){
if (str == null)
return [];
str = String(str);
return size > 0 ? str.match(new RegExp('.{1,' + size + '}', 'g')) : [str];
}

我也有代码检查字节

const byteSize = str => new Blob([str]).size;

const result = byteSize("sample")

【问题讨论】:

  • 如果您使用 Node.js 执行此操作,只需逐行读取输入文件,将这些动态块存储到缓冲区字符串中,一旦缓冲区大小达到限制,将其推送到单独的文件中。
  • @YevgenGorbunkov 所以使用 javascript 不会成功吗?我使用 java 从图像 base64 编码中获取字符串,然后将其发送到 javascript
  • 在这里你会找到一些答案,stackoverflow.com/questions/32898082/…

标签: javascript


【解决方案1】:

你真的不想“花时间”在 Node 中拆分大字符串。

如果你必须使用香草

这完全可以通过 JavaScript 实现(而且您已经非常接近了)。虽然没有正则表达式和生成器会更优雅:

function* chunk(str, size = 3) {
  for(let i = 0; i < str.length; i+= size ) yield str.slice(i, i + size);
}
[...chunk('hello world')]; // ["hel", "lo ", "wor", "ld"];

如果你可以使用 Node.js

我会用createReadStream 读取您要拆分的文件,然后在达到限制时将其写入不同的文件。这更有效,因为您不需要创建很多小字符串或将所有数据保存在内存中:

(async () => {
  let currentFileIndex = 0, currentBytes = 0;
  let currentFile = fs.createWriteStream(`${currentFileIndex}.csv`);
  for await(const chunk of fs.createReadStream('input.csv') {
    currentBytes += chunk.length;
    if (currentBytes > 32000) { // or whatever limit you want
      currentFile.end(); // probably wait for the allback here
      currentBytes = 0;
      currentFile = fs.createWriteStream(`${++currentFileIndex}.csv`)
    }
    await util.promisify(cb => currentFile.write(chunk, cb)();
  }
})();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 2018-07-19
    • 2015-07-06
    • 2021-03-12
    • 2015-09-21
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多