UNPKG

@acransac/vtk.js

Version:

Visualization Toolkit for the Web

58 lines (51 loc) 1.59 kB
/** * Converts a binary buffer in an ArrayBuffer to a string. * * Note this does not take encoding into consideration, so don't * expect proper Unicode or any other encoding. */ function arrayBufferToString(arrayBuffer) { if ('TextDecoder' in window) { const decoder = new TextDecoder('latin1'); return decoder.decode(arrayBuffer); } // fallback on platforms w/o TextDecoder const byteArray = new Uint8Array(arrayBuffer); const strArr = []; for (let i = 0; i < byteArray.length; ++i) { strArr[i] = String.fromCharCode(byteArray[i]); } return strArr.join(''); } /** * Extracts binary data out of a file ArrayBuffer given a prefix/suffix. */ function extractBinary(arrayBuffer, prefixRegex, suffixRegex = null) { const str = arrayBufferToString(arrayBuffer); const prefixMatch = prefixRegex.exec(str); if (!prefixMatch) { return { text: str }; } const dataStartIndex = prefixMatch.index + prefixMatch[0].length; const strFirstHalf = str.substring(0, dataStartIndex); let retVal = null; const suffixMatch = suffixRegex ? suffixRegex.exec(str) : null; if (suffixMatch) { const strSecondHalf = str.substr(suffixMatch.index); retVal = { text: strFirstHalf + strSecondHalf, binaryBuffer: arrayBuffer.slice(dataStartIndex, suffixMatch.index), }; } else { // no suffix, so just take all the data starting from dataStartIndex retVal = { text: strFirstHalf, binaryBuffer: arrayBuffer.slice(dataStartIndex), }; } return retVal; } export default { arrayBufferToString, extractBinary, };