如何在Java和JavaScript之间传递字节数组

时间:2010-10-01 12:01:11

标签: java javascript arrays byte

我需要从Javascript访问SecureRandom Java Object。我的最终目标是从PRNG获取4个字节并将其转换为Javascript整数变量。根据{{​​3}},以下两行Java代码应该抓住4个随机字节:

byte bytes[] = new byte[4];
random.nextBytes(bytes);

我的问题是我不知道该怎么做  1)分配适合传递给Java方法的字节数组  2)之后将该数组解析为整数

到目前为止,我已经设法使用getSeed()方法返回一个随机字节数组。当我在Firefox中呈现下面提供的HTML代码时,它显示“[B @ 16f70a4”,它似乎是一个指针或其他东西。

<script>
var sprng = new java.security.SecureRandom();
random = sprng.getSeed(4);
document.write(random + "<br/>\n");
</script>

这让我觉得我成功实例化并访问了Java类,但是在类型转换方面存在问题。

任何人都可以帮我写 allocateJavaByteArray(N) convertJavaByteArrayToInt(N)让以下代码工作:

var sprng = new java.security.SecureRandom();
var nextBytes = allocateJavaByteArray(4);
srng.nextBytes(nextBytes);
var nextInt = convertJavaByteArrayToInt(4);

提前谢谢。

4 个答案:

答案 0 :(得分:2)

您可以像这样实施 convertJavaByteArrayToInt

function convertJavaByteArrayToInt(bytes) {
  var r = 0;
  for (var i = 0; i < bytes.length; i++) {
    r += (bytes[i] & 0xff) << (8 * i);
  }
  return r;
}

allocateJavaByteArray 很难实现,因为我们无法获得字节。因此,无法使用 java.lang.reflect.Array.newInstance 来创建 byte [] 实例。但这是一个棘手的实现:

function allocateJavaByteArray(n) {
  var r = "";
  for (var i = 0; i < n; i++) {
    r += "0";
  }
  return new java.lang.String(r).getBytes();
}

已更新:上面的代码似乎无法在FireFox 3.6中使用。这是另一个 allocateJavaByteArray 实现,请尝试:

function allocateJavaByteArray(n) {
  var r = new java.io.ByteArrayOutputStream(4);
  for (var i = 0; i < n; i++) {
    r.write(0);
  }
  return r.toByteArray();
}

答案 1 :(得分:0)

通常你会在服务器上生成随机数并将其传递给jsp中的请求。

答案 2 :(得分:0)

您可以在第一时间生成一个随机整数,如下所示:

var nextInt = sprng.nextInt();

答案 3 :(得分:0)

Java字符串是唯一能够毫不费力地传递Java-&gt; JS或JS-&gt; Java的东西。

byte []或任何arry将在JS中看作JSObject。


var sprng = new java.security.SecureRandom();

var foo= new java.package.SomeClass();

在Netscape / Mozilla / FF

中有效

它需要访问类,所以任何java标准类或者你需要加载一个jar然后访问该类。


原始问题:

  1. 创建applet whith实用方法:

    public String someStringEncodedValue(){ 返回1+“|”+2; }

  2. 将applet包含在具有唯一ID

  3. 的页面中
  4. JS使用唯一ID

  5. 查找applet
  6. 通话方法

  7. 解析字符串(由|分割)