【问题标题】:How to get Short value from ArrayBuffer in javascript?如何在 JavaScript 中从 ArrayBuffer 获取 Short 值?
【发布时间】:2015-07-15 14:20:48
【问题描述】:

我在 java 中有一个 ByteBuffer,我从中写下前几个值,它们是:

[-112, -37, 96, -28, -16, -28, -64, -25, 112, -30, -112, -29, 48, -28, 48,
 -30, -48, -28, 32, -27, 80, -31, -112, -29, 80, -31, -96, -28, -96, -28, 
 -112, -30, -96, -30, -16, -27, 16, -28, 48, -27, -64, -32, -112, -30, -32,
 -29, etc ,...]

mybuffer.getShort() 这样的代码返回值-9328、-7072 等...
并根据 Java API:

short java.nio.ByteBuffer.getShort()

读取短值的相对获取方法。

在这个缓冲区的当前位置读取接下来的两个字节,组成 根据当前字节顺序将它们转换成一个短值,然后 将位置增加 2。

返回:缓冲区当前位置的短值

Throws:BufferUnderflowException - 如果少于两个字节 留在这个缓冲区中。

到这里一切都很好,所以问题从这里开始,问题是如果我想在 javascript 中实现同样的目标,那么该怎么做呢?

我在javascript中使用ArrayBuffer,但是根据java API,他们做了一些非常混乱的计算。

这是我的 javascript 代码:

var buf = new ArrayBuffer(res.length); // 2 bytes for each char
var bufView = new Uint16Array(buf); //buf is same as buffer in java ByteBuffer above.

for (var i = 0, strLen = res.length; i < strLen; i++) {
    bufView[i] = res.charCodeAt(i);
}

【问题讨论】:

  • 你的代码有什么问题?
  • 不清楚你想做什么。你有 Java 中的 StringBuffer 并且你需要将该数据传递给 JavaaScript 吗?
  • 如何从javascript访问java数组?
  • 我看到的第一个问题是您错误地设置了ArrayBuffer 的长度。你需要做var buf = new ArrayBuffer(res.length * 2);
  • 查看此链接docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html。我想在客户端(javascript)有类似类型的 ByteBuffer 现在清楚了吗?。

标签: javascript java


【解决方案1】:

只是需要同样的东西,很失望没有提供答案:D

用 Scala 玩了一会儿,然后跳到 Java,终于搞定了 (当然这符合我的需要,Java 的实现有不同的选择..)

const getShort = (a,b) => a << 8 | b << 0

所以如果你有一个 Uint8Array([1,2,3,4,5,6])

const uiArr = new Uint8Array([1,2,3,4,5,6])

如果你想得到第一个短的,只需从数组中传递前两个值

const firstShort = getShort(uiArr[1], uiArr[0]) // in my case little endian 
const secondShort = getShort(uiArr[3], uiArr[2])

【讨论】:

  • 我已经在 javascript 中做了同样的事情。希望您的帖子对某人有所帮助..谢谢
猜你喜欢
  • 2012-06-12
  • 2012-08-09
  • 2019-06-11
  • 2019-02-22
  • 2019-04-05
  • 2019-07-13
  • 2017-11-02
  • 2012-05-22
  • 2013-04-28
相关资源
最近更新 更多