A MDN, è possibile trovare una panoramica di tutti ArrayBufferView
sottoclassi disponibili:
Type | Size | Description | Equivalent C type
-------------+------+---------------------------------------+------------------
Int8Array | 1 | 8-bit twos complement signed integer | signed char
Uint8Array | 1 | 8-bit unsigned integer | unsigned char
Int16Array | 2 | 16-bit twos complement signed integer | short
Uint16Array | 2 | 16-bit unsigned integer | unsigned short
Int32Array | 4 | 32-bit twos complement signed integer | int
Uint32Array | 4 | 32-bit unsigned integer | unsigned int
Float32Array | 4 | 32-bit IEEE floating point number | float
Float64Array | 8 | 64-bit IEEE floating point number | double
Fondamentalmente, questo elenca spazi ciò che la memoria ogni elemento dell'array occupare e se si tratta di un semplice numero o un numero FP. Non sono sicuro di quali lingue hai familiarità, ma se riguarda anche Java, è fondamentalmente la stessa scelta che faresti su byte[]
, short[]
, int[]
, float[]
e double[]
(Java è sempre firmato, in modo che parte non importa).
Sappiamo che le immagini di tipo binario vengono solitamente rappresentate come una matrice di byte. Un array breve/int/lungo può anche, ma questo è uno spreco di spazio di memoria. Se si memorizzasse un'immagine da 100 KB (si noti che "B" sta per byte, ovvero 8 bit) in un array int invece che in un array di byte, quindi occuperebbe 400 KB di memoria, ovvero uno spreco di 300 KB. Quindi il più piccolo, Int8Array
, sarebbe già sufficiente per quanto riguarda lo spazio di memoria. Se desideri mai piace attraversare programmazione che — che è molto improbabile che in questo caso — come un array senza segno, allora si può optare per il Uint8Array
invece in cui ogni elemento contiene valori 0
-255
invece di valori -128
a 127
.
Ecco un esempio di kickoff cancellabile e non copiabile che scarica un file di immagine dal server, lo salva nello spazio di archiviazione locale temporaneo e lo presenta come un <img>
nel corpo (è richiesta una piccola quantità di jQuery parte). Questo esempio presuppone che il file image.png
si trova nella stessa cartella di base come il JS (o HTML, nel caso in cui JS è inline) file stato scaricato da:
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.TEMPORARY, 1024*1024, startDownload, errorHandler);
var errorHandler = function(error) {
console.log('FS error: ' + error);
}
var xhr = new XMLHttpRequest();
xhr.open('GET', 'image.png', true);
xhr.responseType = 'arraybuffer';
function startDownload(fileSystem) {
xhr.onload = function(event) {
var content = new Int8Array(this.response);
fileSystem.root.getFile('/image.png', { 'create': true }, function(fileEntry) {
fileEntry.createWriter(function(fileWriter) {
fileWriter.onwriteend = function(event) {
$('body').append('<p>Image successfully downloaded:</p>')
.append('<p><img src="' + fileEntry.toURL() + '"/></p>');
};
var blob = new Blob([content], { type: 'image/png' });
fileWriter.write(blob);
}, errorHandler);
});
}
xhr.send();
}
nota, come dello stato current, questo funziona solo in Chrome.
Che dire dell'utilizzo di JSON? –