Javascript字节数组是否为长?
我有一个用Java构建的Javascript字节数组是否为长?,java,javascript,byte,bytearray,long-integer,Java,Javascript,Byte,Bytearray,Long Integer,我有一个用Java构建的byteArray,它包含long。我需要能够用Javascript阅读这些长文本。我知道Javascript默认情况下不支持long。这有什么办法吗?我可以把它读成字符串吗 谢谢我想与大家分享我的技巧,这可能对某些人有用 我的java服务器通过二进制websocket消息从System.currentTimeMillis()向所有客户端发送带有长时间戳的播放器位置。在客户端,我使用DataView解析此消息 但是DataView没有方法getInt64()。我的解决办法
byteArray
,它包含long
。我需要能够用Javascript阅读这些长文本。我知道Javascript默认情况下不支持long
。这有什么办法吗?我可以把它读成字符串吗
谢谢我想与大家分享我的技巧,这可能对某些人有用
我的java服务器通过二进制websocket消息从System.currentTimeMillis()
向所有客户端发送带有长时间戳的播放器位置。在客户端,我使用DataView
解析此消息
但是DataView没有方法getInt64()
。我的解决办法是把long分成两部分
在服务器端:
long time = System.currentTimeMillis();
int firstPiece = (int)(time / 1000);
short secondPiece = (short)(time % 1000);
在客户端:
let data = {};
let view = new DataView(binary);
data.t = view.getInt32(offset) * 1000 + view.getInt16(offset + 4);
这也节省了2个字节(长8字节>int 4字节+短2字节),但它将工作到2038年。下面的DataView.getInt64()
实现将使您能够以足够的精度完成此操作:
真正的问题是,由于JavaScript只知道IEEE 754 64位浮点数,因此数字不能大于2^53-1。但您可以使用位操作尽可能多地重构。您还应该知道字节顺序是LE还是BE,当然请参见下面的答案,currentTimeMilis()
将是<2^53