- From: Chang Shu <cshu01@gmail.com>
- Date: Mon, 5 Aug 2013 10:12:32 -0400
- To: whatwg@lists.whatwg.org
Hi, all, Based on the discussion in Blink-dev mail group, https://groups.google.com/a/chromium.org/forum/#!searchin/blink-dev/stringview/blink-dev/ylgiNY_ZSV0/vne3e0aplUUJ, particularly from Adam Bath's suggestion, I drafted a proposal for binary encoding on Typed Arrays by enhancing window.btoa and atob APIs. The text of the proposal is pasted as below. I appreciate your kind review. Chang ------------------------------------------------------------------------------- BinaryEncoding Proposed Binary Encoding Web API for Typed Arrays Editors Chang Shu (Samsung Electronics) Abstract This specification enhances the existing window.btoa and window.atob Web APIs to encode directly from Typed Arrays to Base64 strings and vice versa. Use Case Description A webapp sends data from Typed Array to NPAPI plugin and also reads data back. Since the only possible data type supported by NPAPI to send data buffer is text string, an efficient way of converting Typed Array to Base64 string is required. Current Limitations The only existing Web API involving binary data encoding are window.btoa and window.atob. However, they require the raw data being contained in a 'binary' string format while in many cases the raw data is stored in Typed Array. Current Usage and Workarounds Currently, converting Typed Array to 'binary' string can be done in JS functions. But performance is not acceptable for large data buffers. Benefits The new enhancement of btoa and atob converts the raw data in Typed Arrays to text string and from text string to Typed Arrays directly. The performance is the best since all operations are done in native code. Requests for this Feature I would like this feature to be implemented and shipped. Proposed Solutions My Solution The approach is to enhance existing btoa and atob to take Typed Array parameters while keeping backward compatibility. window.btoa Summary Creates a base-64 encoded ASCII string from either a "string" of binary data or a Typed Array. Syntax var encodedData = window.btoa(dataToEncode); Note that there is no syntax change in window.btoa API. Example var encodedData = window.btoa("hello"); //encode a string. Consider the string as 'binary' var arr = new Int32Array(3); arr[0] = 1; arr[1] = 2; arr[2] = 3; var encodedData = window.btoa(arr); //encode integer data into a base-64 string window.atob Summary Decodes a base-64 encoded ASCII string into a "string" of binary data and a Typed Array if parameter provided. Syntax var decodedArr = new Int32Array(); var decodedData = window.atob(encodedData, [Optinoal] decodedArr); Note that the 2nd parameter is optional which keeps the backward compatibility. Example var arr = new Int32Array(3); arr[0] = 1; arr[1] = 2; arr[2] = 3; var encodedData = window.btoa(arr); //encode integer data into a base-64 string var newarr = new Int32Array(); window.atob(encodedData, newarr); //decode base-64 string back to integer array //newarr[0] should be 1, newarr[1] should be 2 and newarr[2] should be 3.
Received on Monday, 5 August 2013 14:12:57 UTC