2012-12-22 34 views
3

我正在修补JavaScript中的一些Windows应用商店开发,我好像被困在如何从二进制文件中获取字节数组。我在网上找到了一些例子,但它们似乎只能读取文本,而我的文件是图像。我打开该文件是这样的:文件到WinJS中的字节数组

Windows.Storage.FileIO.readBufferAsync(photos[currentIndex]).done(function (buffer) { 

    var dataReader = Windows.Storage.Streams.DataReader.fromBuffer(buffer); 
    var fileContent = dataReader.readString(buffer.length); 
    dataReader.close(); 

    // do something with fileContent 

}); 

photos[currentIndex]是一个文件(从getFilesAsync()加载)。这种情况下的错误当然是readString在二进制数据上失败。它不能将“字符”映射到字符串中。我也试过这样:

Windows.Storage.FileIO.readBufferAsync(photos[currentIndex]).done(function (buffer) { 

    var bytes = []; 
    var dataReader = Windows.Storage.Streams.DataReader.fromBuffer(buffer); 
    dataReader.readBytes(bytes); 
    dataReader.close(); 

    // do something with bytes 

}); 

bytes是空的,所以我想我错误地用这个。我想我只是在这里忽略一些简单的东西,但由于某种原因,我似乎无法找到正确的方式将二进制文件读入字节数组中。有人可以提供第二套眼睛来帮助吗?

回答

5

发布问题后想通了几乎立即,但我想我会离开这里的答案为后人...

我需要声明的第二个例子不同的阵列:

Windows.Storage.FileIO.readBufferAsync(photos[currentIndex]).done(function (buffer) { 

    var bytes = new Uint8Array(buffer.length); 
    var dataReader = Windows.Storage.Streams.DataReader.fromBuffer(buffer); 
    dataReader.readBytes(bytes); 
    dataReader.close(); 

    // do something with bytes 

}); 

我的JavaScript不太符合标准,所以我想我不明白数组声明应该如何工作。 (当我在浏览器中使用vanilla JavaScript时,我总是只声明像我最初做的那样的空数组,并将它们附加到它们上面。)但是这样做的确有用。

+1

您不能使用常规数组作为字节数据,所以有一组数组用于字节数据,如Uint8Array,Float32Array等。另外,它们的运行速度比常规数组快。 – Licson