mirror of
https://github.com/RGBCube/serenity
synced 2025-05-20 14:05:08 +00:00

Which means that we now have support for DataViews. Using the ArrayBufferView class also seems to make this read a whole bunch nicer as well.
36 lines
1,007 B
HTML
36 lines
1,007 B
HTML
<script src="../include.js"></script>
|
|
<script>
|
|
async function testByobRead(type) {
|
|
const array = ['This is some data to be read! 🦬'];
|
|
let blob = new Blob(array);
|
|
|
|
const stream = blob.stream();
|
|
const reader = stream.getReader({ mode: "byob" });
|
|
|
|
let buffer = new ArrayBuffer(200);
|
|
let bytesReceived = 0;
|
|
let offset = 0;
|
|
|
|
println(`About to read into ${type.prototype.constructor.name} with ${reader}`);
|
|
|
|
while (true) {
|
|
let result = await reader.read(new type(buffer, offset, buffer.byteLength - offset));
|
|
|
|
if (result.done) {
|
|
println(`Total bytes: ${bytesReceived}`);
|
|
println(`'${new TextDecoder().decode(result.value.buffer.slice(0, bytesReceived))}'`);
|
|
return;
|
|
}
|
|
|
|
buffer = result.value.buffer;
|
|
offset += result.value.byteLength;
|
|
bytesReceived += result.value.byteLength;
|
|
}
|
|
}
|
|
|
|
asyncTest(async done => {
|
|
await testByobRead(Uint8Array);
|
|
await testByobRead(DataView);
|
|
done();
|
|
});
|
|
</script>
|