ArrayBuffer.transfer()

This is an archived page. It's not actively maintained.

Dies ist eine experimentelle Technologie
Da diese Technologie noch nicht definitiv implementiert wurde, sollte die BrowserkompatibilitÀt beachtet werden. Es ist auch möglich, dass die Syntax in einer spÀteren Spezifikation noch geÀndert wird.

Die statische ArrayBuffer.transfer() Funktion gibt einen neuen ArrayBuffer mit dem Inhalt von oldBuffer. Je nachdem, wei die newByteLength gesetzt ist, werden die Daten abgeschnitten oder erweitert. Wenn newByteLength nicht gesetzt ist, wird die byteLength von oldBuffer benutzt. Diese Operation bringt oldBuffer in einen detached Status.

Syntax

ArrayBuffer.transfer(oldBuffer [, newByteLength]);

Parameter

oldBuffer
Ein ArrayBuffer Objekt von dem die Daten transferiert werden.
newByteLength
Die BytelÀnge des neuen ArrayBuffer Objektes.

RĂŒckgabewert

Ein neues ArrayBuffer Objekt.

Beschreibung

Die ArrayBuffer.transfer() Methode erlaubt es ein ArrayBuffer zu vergrĂ¶ĂŸern und zu detachen. Die Möglichkeit ein ArrayBuffer zu vergrĂ¶ĂŸern ohne es zu kopieren, hat den Vorteil, dass es viel schneller fĂŒr große Buffer ist (Ă€hnlich wie bei realloc). Die Möglichkeit, dass ein ArrayBuffer detachet wird, gibt dem Entwickler die explizite Kontrolle ĂŒber das freigeben des internen Speichers. Dieses vermeidet das Entfernen aller Referenzen und das Warten auf die Garbage Collection.

Beispiele

var buf1 = new ArrayBuffer(40);
new Int32Array(buf1)[0] = 42;

var buf2 = ArrayBuffer.transfer(buf1, 80);
buf1.byteLength; // 0 but if you use the polyfill then the value is still 40
buf2.byteLength; // 80
new Int32Array(buf2)[0]; // 42

var buf3 = ArrayBuffer.transfer(buf2, 0);
buf2.byteLength; // 0 but if you use the polyfill then the value is still 80
buf3.byteLength; // 0

Polyfill

FĂŒr Browser, die die Funktion nicht nativ unterstĂŒtzen, gibt es die Möglichkeit folgenden Quelltext am Anfang eines Skriptes einzufĂŒgen, um die Funktion transfer() zu benutzen. Diese Funktion ist nicht exakt die in der API beschriebene, weil Browser, die die Funktion unterstĂŒtzen, direkten Zugriff auf die C++ Funktion realloc() haben, welche die LĂ€nge des Speichers erhöht und nur eine Kopie anlegt, wenn es nötig ist. Im Gegensatz dazu kopiert der folgende Pollyfill alles immer in neuen Speicher. Diese Funktion transferiert die Daten jedoch von einem ArrayBuffer zu einem anderen.

if (!ArrayBuffer.transfer) {
    ArrayBuffer.transfer = function(source, length) {
        if (!(source instanceof ArrayBuffer))
            throw new TypeError('Source must be an instance of ArrayBuffer');
        if (length <= source.byteLength)
            return source.slice(0, length);
        var sourceView = new Uint8Array(source),
            destView = new Uint8Array(new ArrayBuffer(length));
        destView.set(sourceView);
        return dest.buffer;
    };
}

Spezifikationen

Ist in keiner aktuellen Spezifikation enthalten, wird aber in der Zukunft fĂŒr ECMA-262 geplant.

BrowserkompatibilitÀt

No compatibility data found. Please contribute data for "javascript.builtins.ArrayBuffer.transfer" (depth: 1) to the MDN compatibility data repository.

Siehe auch