2013-01-13 3 views
15

XHR을 통해 ArrayBuffer를 검색하고 FileWriter를 사용하여 FileSystem API에 저장하려고합니다. FileWriter는 Blob을 기대하고 Blob 생성자는 ArrayBuffer를 사용하지 않고 ArrayBufferView를 사용합니다.Which ArrayBufferView

선택할 수있는 ArrayBufferView가 여러 개 있는데, 어떤 것이 올바른지 어떻게 알 수 있습니까?

+0

JSON은 어떻게 사용합니까? –

답변

14

MDN에서 사용 가능한 모든 ArrayBufferView 서브 클래스의 개요를 찾을 수 있습니다

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 

기본적으로,이 배열의 각 항목이 차지하는 어떤 메모리 공간을 나열하고는 일반 번호 또는 FP 번호 인 경우. 잘 알고있는 언어가 무엇인지 잘 모르겠지만 자바를 다루는 경우라면 기본적으로 byte[], short[], int[], float[]double[]과 같은 선택입니다 (자바는 항상 서명되어 있으므로 부분은 중요하지 않음).

우리는 이미지와 같은 바이너리 데이터는 일반적으로 바이트 배열로 표시됩니다. 짧은/int/long 배열도 가능하지만 이는 메모리 공간의 낭비입니다. 바이트 배열 대신 int 배열에 100KB 이미지 ("B"는 8 비트 인 바이트를 나타냅니다.)를 저장하면 300KB의 낭비 인 400KB의 메모리를 차지합니다. 그래서 가장 작은 것, Int8Array, 이미 메모리 공간에 관해서는 충분할 것입니다. 혹시 프로그래밍 그것을 서명되지 않은 배열로이 경우 — 매우 가능성이 —을 통과하려는 경우 각 항목 0255에 대신 값 127-128의 값을 보유하는 대신 경우에, 당신은 Uint8Array를 선택할 수 있습니다.

서버에서 이미지 파일을 다운로드하여 임시 로컬 저장 공간에 저장하고 본체에 <img>으로 표시하는 '복사 할 수 없음'실행 가능 킥오프 예제입니다 (작은 jQuery가 필요합니다. 부품). 이 작동 current 상태로,

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(); 
} 

참고 :이 예제 파일에서 다운로드 한 image.png 파일 (또는 HTML JS가 인라인 경우) JS와 같은 기본 폴더에있는 것으로 가정 Chrome에서만 사용할 수 있습니다.