From a346462ae881feabd1cf911fc0a599c05a0dec2b Mon Sep 17 00:00:00 2001 From: Andrew Calcutt Date: Mon, 9 Oct 2023 13:35:52 -0400 Subject: [PATCH] refactor: consolidate get byte functions Signed-off-by: Andrew Calcutt --- src/pmtiles_adapter.js | 56 +++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/src/pmtiles_adapter.js b/src/pmtiles_adapter.js index 630b36a..372c387 100644 --- a/src/pmtiles_adapter.js +++ b/src/pmtiles_adapter.js @@ -9,11 +9,34 @@ const PMTilesLocalSource = class { return this.file.name; } async getBytes(offset, length) { - const blob = await ReadFileBytes(this.file, offset, length); - return { data: blob }; + const sharedBuffer = Buffer.alloc(length); + const fd = fs.openSync(this.file); // file descriptor + let bytesRead = 0; // how many bytes were read + + for (let i = 0; i < length; i++) { + let postion = offset + i; + await ReadBytes(fd, sharedBuffer, postion); + bytesRead = (i + 1) * length; + if (bytesRead === length) { + break; + } + } + fs.closeSync(fd); //close file when finished + return { data: BufferToArrayBuffer(sharedBuffer) }; } }; +const ReadBytes = async (fd, sharedBuffer, offset) => { + return new Promise((resolve, reject) => { + fs.read(fd, sharedBuffer, 0, sharedBuffer.length, offset, (err) => { + if (err) { + return reject(err); + } + resolve(); + }); + }); +}; + export const GetPMtilesInfo = async (pmtilesFile) => { const source = new PMTilesLocalSource(pmtilesFile); const pmtiles = new PMTiles.PMTiles(source); @@ -78,35 +101,6 @@ const GetPmtilesTileType = (typenum) => { return { type: tileType, header: head }; }; -const ReadFileBytes = async (filePath, offset, size) => { - const sharedBuffer = Buffer.alloc(size); - const fd = fs.openSync(filePath); // file descriptor - let bytesRead = 0; // how many bytes were read - - for (let i = 0; i < size; i++) { - let postion = offset + i; - await ReadBytes(fd, sharedBuffer, postion); - bytesRead = (i + 1) * size; - if (bytesRead === size) { - break; - } - } - fs.closeSync(fd); //close file when finished - - return BufferToArrayBuffer(sharedBuffer); -}; - -const ReadBytes = async (fd, sharedBuffer, offset) => { - return new Promise((resolve, reject) => { - fs.read(fd, sharedBuffer, 0, sharedBuffer.length, offset, (err) => { - if (err) { - return reject(err); - } - resolve(); - }); - }); -}; - const BufferToArrayBuffer = (buffer) => { const arrayBuffer = new ArrayBuffer(buffer.length); const view = new Uint8Array(arrayBuffer);