我需要读取名为" a.bin"的二进制文件。逐个字节,存储在/ src / assets目录中(我使用ionic2编写一个App,我需要从目录中读取一些数据),我尝试了一些方法如下,但如果文件" a.bin& #34;包含大于128的ascii代码,我发现我得到的字节多于包含的文件,并且该值与文件包含的值不同。 以下是源代码:
public getFile()
{
this.getFileDataArray("a.bin").then((arr_buf)=>
{
console.log("the blob size is:"+arr_buf.size);
var reader = new FileReader();
reader.onloadend = function ()
{
let blob=new Uint8Array(reader.result);
for (let a=0;a<blob.byteLength;a++)
console.log("---------no:"+a+"--value:"+blob[a]);
}
reader.readAsArrayBuffer(arr_buf);
}
}
public getFileDataArray(filename:string):Promise<Blob>
{
return new Promise((resolve, reject) =>
{
this.http.get('assets/'+filename)
.subscribe(res =>
{
resolve(new Blob([res['_body']],{type: "application/octet-stream" }));
});
});
}
这是a.bin的原始内容
但是当我读取第34个字节时,结果开始出错,我认为应用程序将字节更改为unicode。我怎样才能得到正确的结果? 顺便说一句,即使将getFileDataArray改为下面(返回Promise或Promise),我仍然无法得到正确的结果。
public getFileDataArray(filename:string):Promise<text>
{
return new Promise((resolve, reject) =>
{
this.http.get('assets/'+filename)
.subscribe(res =>
{
resolve(res.text());
});
});
}
---------承诺---仍然不正确----------------- 我
答案 0 :(得分:0)
我怀疑这里有一个字符编码问题,但由于我不确定哪个版本的Angular带有“ionic-angular 3.9.2”,所以我不知道这是否与http
匹配你正在使用的客户。这至少值得一试:
this.http.get('assets/' + filename, {responseType: 'arraybuffer'})
答案 1 :(得分:0)
public getFileData(filename:string):Observable<Blob>
{
return this.http.get('assets/'+filename, {responseType: ResponseContentType.Blob})
.map(response => (response).blob());
}