簡體   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