繁体   English   中英

NodejS 从文件读取/写入二进制数据

[英]NodejS Read/Write Binary Data to/from file

好吧,所以我有一个带有二进制数据的字符串(“111011 10001 等”),我试图将它保存到一个文件中,以便他们使用流在另一个文件上读取它,问题是 stream 正在切割数据off(块中最后的二进制数被截断) 在此处输入图像描述

这就是我将数据发送到文件的方式(读取文件,使用 golombRice 编码器对其进行编码并将其存储在文件中,使用数据块)

  const writer = fs.createWriteStream(
    `./encodedAndDecoded/encoded${filename}`,
    {
      encoding: "binary",
    }
  );
  const reader = fs.createReadStream(`./silesia/${filename}`, {
    encoding: "base64",
  });

  await new Promise((resolve, reject) => {
    reader.on("data", (chunk) => {
      writer.write(Buffer.from(golombRiceEncoding(chunk, 3)));
    });
    reader.on("end", () => {
      writer.end();
      resolve();
    });
  });

这就是我阅读它的方式(读取编码文件,使用 golombRice 编码器对其进行解码并将其存储在文件中,使用数据块,问题是这些块没有完整的二进制数据,因为stream 削减它)

  const writer = fs.createWriteStream(`./encodedAndDecoded/decoded${filename}`);

  const reader = fs.createReadStream(`./encodedAndDecoded/encoded${filename}`, {
    encoding: "binary",
  });

  await new Promise((resolve, reject) => {
    reader.on("data", (chunk) => {
      writer.write(Buffer.from(golombRiceDecoding(chunk, 3), "base64"));
    });
    reader.on("end", () => {
      writer.end();
      resolve();
    });
  });

想知道是否有办法让它使用流读取数据,但不切割二进制数? 我不介意它是否一次读取 x,问题是当它切割二进制数时,解码时使数据无效。 谢谢

您尝试解码的特定压缩方案看起来像是可变字节方案。 因此,如果块边界与可变字节压缩块的大小不完全一致,您的解压缩库将失败。

要即时解码此类内容,您必须在解码器中直接构建逻辑,以识别何时只有部分数据,然后缓冲该数据以将其与到达的下一个数据块组合。 因为压缩是可变字节的,所以如果不作为解压缩逻辑的一部分,就无法知道正确的边界在哪里。

或者,您可以放弃进行即时解码,将所有压缩数据缓冲到 memory 中,然后在拥有所有数据后立即全部解压缩(这样您就不必担心任何块边界)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM