Javascript

nodejs 使用DataView写本地二进制文件时读取问题

本文主要是介绍nodejs 使用DataView写本地二进制文件时读取问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

最近遇到这个问题很困惑的问题

使用nodejs写了个本地文件

代码如下

function test() {

    let buffer = new ArrayBuffer(8);
    let u8A = new Uint8Array(buffer);
    let dataView = new DataView(u8A.buffer);
    dataView.setInt8(0, 127);
    dataView.setUint16(1, 256, true);
    dataView.setUint16(3, 11, true); //当这里写入的值大于 127时出现问题
    dataView.setUint16(5, 165, true);//当这里写入的值大于127时会溢出(浏览器读取时)
    let url = "test.bin";
    fs.writeFile(url, dataView, { encoding: 'utf-8' }, function (err) {// 'utf8'
        if (err) {
            console.log('写入文件失败 url: ' + url);//+ " text: " + text
            return;
        }
        console.log('===>写入bin文件成功 url: ' + url);
    });
    console.log("=====>OutBin path:" + path + "  buffer.byteLength: " + buffer.byteLength);
    setTimeout(() => {
        fs.readFile("test.bin", {}, (err, buffer) => {

            console.log("=============>load test.bin buffer: " + buffer + " byteLength: " + buffer.byteLength);

            let dv = new DataView(buffer);
            let a = dv.getInt8(0);
            let b = dv.getUint16(1, true);
            let c = dv.getUint16(3, true);
            let d = dv.getUint16(5, true);

            console.log(`a=${a} b=${b} c=${c} d=${d}`);  //本地这里读取这里没问题
        });
    }, 2000);
}
test();

 

在本地服务起打开index.html时读取生成的该文件时出现溢出问题!!!

<html>

<head>
    <title>www.layabox.com</title>
    <meta charset='utf-8' />
    <meta name='renderer' content='webkit' />
    <meta name='viewport'
        content='width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no' />
    <meta name='apple-mobile-web-app-capable' content='yes' />
    <meta name='full-screen' content='true' />
    <meta name='x5-fullscreen' content='true' />
    <meta name='360-fullscreen' content='true' />
    <meta name='laya' screenorientation='landscape' />
    <meta http-equiv='expires' content='0' />
    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />
    <meta http-equiv='expires' content='0' />
    <meta http-equiv='Cache-Control' content='no-siteapp' />
</head>

<body>
    <script type="text/javascript">
        function loadLib(url) {
            var script = document.createElement("script");
            script.async = false;
            script.src = url;
            document.body.appendChild(script);
        }
        var request = new XMLHttpRequest();
        request.open("get", "test.bin");
        request.send(null);
        request.responseType = "arraybuffer";
        request.onload = function () {
            console.log("arraybuffer-----", request.response);

            let dv = new DataView(request.response);

            let a = dv.getInt8(0);
            let b = dv.getUint16(1, true);
            let c = dv.getUint16(3, true);//这里值大于127时会产生溢出
            let d = dv.getUint16(5, true);//这里值大于127时会产生溢出

            console.log(`a=${a} b=${b} c=${c} d=${d}`);
        }
    </script>
</body>

</html>

 

 

很久了还是没搞懂为啥会在浏览器读取生成的二进制文件时产生溢出的问题

有高手知道的话不吝赐教,非常感谢

 

这篇关于nodejs 使用DataView写本地二进制文件时读取问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!