(Hinweis: In dieser Diskussion geht es um die Art und Weise, wie das Array-Interop funktioniert, was relevant sein könnte.)
Ich versuche, ein Array von Shorts von Blazor mithilfe der Blazor-Byte-Array-Interop-Optimierung auf TypeScript zu übertragen.
Ich habe die folgende C#-Methode, die ich aus JavaScript aufrufe:
Code: Select all
[JSInvokable]
public byte[] ReadDataBytes()
{
var shortArray = new short[1000]; // In real use, this comes from some data source.
var byteArray = new byte[shortArray.Length * sizeof(short)];
Buffer.BlockCopy(shortArray, 0, byteArray, 0, byteArray.Length);
return byteArray;
}
Code: Select all
async readData(): Promise
{
const byteArray = await this._dotNetObject.invokeMethodAsync("ReadDataBytes");
console.log("byteOffset = ", byteArray.byteOffset);
// Check if the byteArray is properly aligned for Int16Array
if (byteArray.byteOffset % 2 !== 0)
{
// If not aligned, create a new properly aligned buffer
const alignedBuffer = new ArrayBuffer(byteArray.byteLength);
const alignedView = new Uint8Array(alignedBuffer);
alignedView.set(byteArray);
return new Int16Array(alignedBuffer);
}
// Convert byte array directly to Int16Array (little-endian) if properly aligned
return new Int16Array(byteArray.buffer, byteArray.byteOffset, byteArray.byteLength / 2);
}
Code: Select all
_dotNetObjectCode: Select all
export declare namespace DotNet {
interface DotNetObject {
invokeMethodAsync(methodIdentifier: string, ...args: any[]): Promise;
invokeMethod(methodIdentifier: string, ...args: any[]): T;
dispose(): void;
}
}
Code: Select all
7 byteOffset = 29
7 byteOffset = 30
119 byteOffset = 31
Code: Select all
async readData(): Promise
{
const byteArray = await this._dotNetObject.invokeMethodAsync("ReadDataBytes");
console.log("byteOffset = ", byteArray.byteOffset);
// Convert byte array directly to Int16Array (little-endian)
return new Int16Array(byteArray.buffer, byteArray.byteOffset, byteArray.byteLength / 2);
}
Gibt es eine Möglichkeit, Dinge so zu konfigurieren, dass die Daten in ReadDataBytes() korrekt auf ein Vielfaches von sizeof(short) ausgerichtet werden, sodass ich die Daten nicht kopieren muss, um sie in readData() auszurichten?
Mobile version