proposal: DataView.prototype.toString(start = 0, end = this.length, enc= "utf8")

# Ali Rahbari (6 years ago)

When working with binary data, reading string from buffer is a necessity. For example when deserializing bson data in the browser.

Most of node.js buffer methods are available in DataView except toString. As a workaround currently it's done by reading the buffer byte by byte and convert each of them to corresponding character with String.fromCharCode() and then joining the result.

This can be done much faster in native code.

DataView.prototype.toString(start = 0, end = this.length, encoding= "utf8")

DataView.prototype.writeString(string, offset = 0, length = string.length, encoding = "utf8")

# Isiah Meadows (6 years ago)

You might be interested in some of the things I have here:

isiahmeadows/array-additions-proposal/blob/master/README.md

I'm not quite to the point of pushing TC39 to consider, but after I get around to sorting it better, I'd love to see all of them eventually implemented.

Note that for some common cases, like to ASCII or UTF-8 when no character in the string is above U+007F or to UCS-2/UTF-16 when at least one character is above that, it's a trivial memcpy for multi-character strings.

# Ken Russell (6 years ago)

If DataView's methods were faster, would this eliminate the need for this addition?

In the V8 engine, some recent work significantly improved DataView's performance. See crbug.com/225811 for details.

# Isiah Meadows (6 years ago)

DataView has nothing to do with this performance-wise - implementations could just use the raw array buffer instead, and it'd be quicker and easier.

The issue is string representation - engines can optimize for it in ways you can't at the language level.

# Ali Rahbari (6 years ago)

Logan mentioned TextDecoder which exactly do this but ArrayBuffer must first get sliced and then passed to TextDecoder. Still it's nice to have this inside DataView as Isiah proposal suggest.

# Isiah Meadows (6 years ago)

I proposed array buffer interop, not data vire interop.