从普通阵列构造Uint8Array在这里是否有意义?

时间:2014-11-09 14:53:15

标签: javascript

我想在IE9中使用以下库,但后者不支持Uint8Array或一般类型的数组。

Uint8Array包装器在代码中只使用了一次,但实际上它似乎是多余的。你能证实吗?

第71行:http://www.perry.cz/files/ExifRestorer.js(只是一个非常小的lib,用于从JPEG中提取Exif信息)

insertExif函数返回一个普通数组,然后exifManipulation在base64编码之前放入Uint8Array:

var image = this.exifManipulation(resizedFileBase64 /*plain string*/, segments /*plain array of plain arrays*/);
this.encode64(image);

...

ExifRestorer.exifManipulation = function(resizedFileBase64, segments)
{
        var exifArray = this.getExifArray(segments), /*plain array*/
            newImageArray = this.insertExif(resizedFileBase64, exifArray), /*plain array*/
            aBuffer = new Uint8Array(newImageArray);

        return aBuffer;
};

ExifRestorer.encode64 = function(input)
{
    var output = "",
        chr1, chr2, chr3 = "",
        enc1, enc2, enc3, enc4 = "",
        i = 0;

    do {
        chr1 = input[i++];
        chr2 = input[i++];
        chr3 = input[i++];

        enc1 = chr1 >> 2;
        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
        enc4 = chr3 & 63;

        if (isNaN(chr2)) {
           enc3 = enc4 = 64;
        } else if (isNaN(chr3)) {
           enc4 = 64;
        }

        output = output +
           this.KEY_STR.charAt(enc1) +
           this.KEY_STR.charAt(enc2) +
           this.KEY_STR.charAt(enc3) +
           this.KEY_STR.charAt(enc4);
        chr1 = chr2 = chr3 = "";
        enc1 = enc2 = enc3 = enc4 = "";
    } while (i < input.length);

    return output;
};

据我了解代码,它无论如何都在内部使用普通数组。它没有使用Uint8Array作为类型数组规范最初预期的ArrayBuffer视图,它只是将plain数组传递给构造函数。

我没有看到将它放入Uint8Array的重点,而不是直接返回基础数值数组(单个字节的[0,255]范围中的每个元素)。事实上,在Windows 7的IE9测试中,代码在没有Uint8Array包装器的情况下工作。

我是否遗漏了任何可能的场景或环境,直接从底层数值数组访问单个元素而不是通过Uint8Array视图会在encode64函数中返回错误或不可靠的结果?我无法想象任何事情。

图书馆没有官方支持,因此我的问题在这里。谢谢大家调查。

0 个答案:

没有答案