Jan
17
BinaryReader is buggy and no longer maintained. Check out jDataView for an up to date version.
With WebGL coming in, it is important to be able to deal with binary data files like the models. Since there is no such thing on the internet right now I decided to make my own. The javascript BinaryReader library tries to mimic the C# BinaryReader.
The code is mostly based on the binary-parser class from Jonas Raoni Soares Silva. I've added the position management and re-factored the code to remove the with
syntax.
In order to load a file into a string, you have to add req.overrideMimeType('text/plain; charset=x-user-defined');
in the Ajax XMLHttpRequest. To read more about this technique, see the Mozilla Developer Center. Here is an overview of the compatible browsers.
- Chrome 4.0.295.0: Works
- Firefox 3.5.7: Works
- Safari 4.0.4: Works
- Internet Explorer 8: Does not work. Doesn't have the overrideMimeType method.
- Opera 10.10: Does not work. Have the overrideMimeType method but doesn't take it in account.
I hope this will help you to parse binary files!
BinaryReader is buggy and no longer maintained. Check out jDataView for an up to date version.
Download
Download BinaryReader.js (3.5k)
API
Constructor
- new BinaryReader(data: String) - Create a BinaryReader with the specified file.
Read Methods
- BinaryReader.readChar()
- BinaryReader.readString(length: Number)
- BinaryReader.readInt8()
- BinaryReader.readUInt8()
- BinaryReader.readInt16()
- BinaryReader.readUInt16()
- BinaryReader.readInt32()
- BinaryReader.readUInt32()
- BinaryReader.readUInt32()
- BinaryReader.readFloat()
- BinaryReader.readDouble()
Position Methods
- BinaryReader.seek(pos: Number) - Go to a specific position (in Byte) in the file
- BinaryReader.getPosition() - Returns the actual position (in Byte) in the file
- BinaryReader.getSize() - Returns the size (in Byte) of the file
Exception
- Error("Index out of bound") - When you try to read something that is beyond the end of the file.
BinaryReader is buggy and no longer maintained. Check out jDataView for an up to date version.
Example - Demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | // Code from https://developer.mozilla.org/En/Using_XMLHttpRequest#Receiving_binary_data function load_binary_resource(url) { var req = new XMLHttpRequest(); req.open('GET', url, false); // The following line says we want to receive data as Binary and not as Unicode req.overrideMimeType('text/plain; charset=x-user-defined'); req.send(null); if (req.status != 200) return ''; return req.responseText; } // Load the file var file = load_binary_resource('author.gif'); // Create the Binary Reader var reader = new BinaryReader(file); // Read some informations var tag = reader.readString(6); var width = reader.readUInt16(); var height = reader.readUInt16(); // Move around the file and try to read what is there reader.seek(parseInt('FA', 16)); var random = reader.readFloat(); console.log( tag, // GIF89a width, // 16 height, // 16 random // 66.01171875 ); |
If you liked this article, you might be interested in my Twitter feed as well.