Tengo una API de terceros que devuelve un conjunto de datos binarios que se convierte mediante BigEndian (confirmado). El conjunto de datos consiste en un conjunto de estudiantes con su nombre e identificación.
Estoy tratando de leer el contenido y actualizar el almacenamiento local en este momento y escribí un archivo javascript para leer los datos y mostrarlos en una consola como la siguiente.
var pointer = 0; var XMLHttpRequest = require('xhr2'); var xhr = new XMLHttpRequest(); xhr.open("GET", "https://api.test.com/students", true); xhr.onload = function () { var data = xhr.response; pointer++; // Read students var classesCount = data.readUInt32BE(pointer); pointer+=4; console.log('classesCount:' + classesCount); for (let classId = 0; classId < classesCount; classId++) { var classNameLength = data.readUInt8(pointer); pointer++; var classNameUTF8 = data.slice(pointer, pointer + classNameLength); pointer += classNameLength; var className = new TextDecoder().decode(classNameUTF8); console.log(className); // display students per class var classStudentCount = data.readUInt32BE(pointer); pointer += 4; //console.log('Class Students: ' + classStudentCount); for (let classStudentId = 0; classStudentId < classStudentCount; classStudentId++) { var studentIdLength = data.readUInt8(pointer); pointer++; var studentIdUTF8 = data.slice(pointer, pointer + studentIdLength); pointer += studentIdLength; var studentId = new TextDecoder().decode(studentIdUTF8); var studentNameLength = data.readUInt8(pointer); pointer++; var studentNameUtf8 = data.slice(pointer, pointer + studentNameLength); pointer += studentNameLength; var studentName = new TextDecoder().decode(studentNameUtf8); pointer += 4; console.log(studentId + ' - ' + studentName); } } }; xhr.setRequestHeader( "Authorization", "Bearer {token}" ); xhr.send();Para aplicar esto en angular, probé con DataView, que admite BigEndian, pero no pude leer el contenido, lo que hice usando el código anterior.
var res = req.response; var buffer = new ArrayBuffer(res.length); var view = new DataView(buffer); console.log('Version: ' + view.getUint8(offset)); offset++; var classCount = view.getUint32(offset); offset += 4; console.log(classCount);Aparte de eso, probé Smart Buffer , pero cuando intento dividir los datos, la función de división no es compatible con Smart Buffer.
¿Qué estoy haciendo mal aquí? ¿Alguien puede señalar el error?.
Gracias por adelantado.