Код: Выделить всё
ReadableStreamBYOBReaderВопрос: Какой смысл принести свой собственный буфер , если буфер, который вы принес, нельзя использовать повторно? Каково оставшееся преимущество, связанное с привлечением собственного буфера? Почему бы просто не дать максимальный размер чтения? В первый раз, когда вы входите в супермаркет с собственной сумкой, все работает так, как и ожидалось, супермаркет заполняет вам сумку, вы опустошиваете ее дома, жена счастлива с вами, отлично. Затем вы попробуете еще раз со своей сумкой. Но супермаркет позволяет вам заполнить вашу сумку, поскольку она уже использовалась ранее. Удачи с объяснением этого дома. Не работает в Safari, так как Safari не имеет поддержки BYOB, в первую очередь. Br />
Код: Выделить всё
const url = 'https://raw.githubusercontent.com/Borewit/test-audio/958e057/Various%20Artists%20-%202009%20-%20netBloc%20Vol%2024_%20tiuqottigeloot%20%5BMP3-V2%5D/01%20-%20Diablo%20Swing%20Orchestra%20-%20Heroines.mp3';
async function byobReader(reader) {
const myBuffer = new Uint8Array(256);
let result;
let i=0;
do {
console.log(`Read iteration ${++i}...`);
result = await reader.read(myBuffer);
console.log(`Read read=${result.value.length} bytes, done=${result.done}`);
} while(!result.done);
}
async function run() {
console.log('fetching...');
const response = await fetch(url);
if (response.ok) {
console.log('HTTP response succussful');
const stream = response.body;
try {
const reader = stream.getReader({mode:'byob'});
console.log('BYOB Reader supported');
await byobReader(reader);
} catch(error) {
console.error(`Failed to initialize BYOB-Reader=${error.message}`);
}
} else {
console.error(`Failed with HTTP-status=${response.status}`);
}
}
run().catch(error => {
console.error(`Error: ${error.message}`);
});Если вы поддерживаете браузер Byob, вывод будет:
Код: Выделить всё
fetching...
HTTP response succussful
BYOB Reader supported
Read iteration 1...
Read read=256 bytes, done=false
Read iteration 2...
Failed to initialize BYOB-Reader=Failed to execute 'read' on 'ReadableStreamBYOBReader': This readable stream reader cannot be used to read as the view has byte length equal to 0
Подробнее здесь: https://stackoverflow.com/questions/794 ... byobreader
Мобильная версия