3

我正在尝试为 JRuby 实现一个 Java 扩展来执行字符串异或。我只是不确定如何将字节数组类型转换为RubyString

public static RubyString xor(ThreadContext context,  IRubyObject self, RubyString x, RubyString y) {
    byte[] xBytes = x.getBytes();
    byte[] yBytes = y.getBytes();

    int length = yBytes.length < xBytes.length ? yBytes.length : xBytes.length;

    for(int i = 0; i < length; i++) {
        xBytes[i] = (byte) (xBytes[i] ^ yBytes[i]);
    }

    // How to return a RubyString with xBytes as its content?
}

此外,如何就地执行相同的操作(即x更新 s 值)?

4

2 回答 2

1

return context.runtime.newString(new ByteList(xBytes, false));

于 2015-07-14T10:42:12.203 回答
0

您首先需要将字节包装在ByteList:中new ByteList(xBytes, false)。最后一个参数 ( Boolean copy) 指示是否包装 Byte 数组的副本。

要就地更新字符串,请使用[RubyString#setValue()][2]

x.setValue(new ByteList(xBytes, false);
return x;

要返回一个新的RubyString,您可以将该列表传递给当前运行时的#newString()

return context.runtime.newString(new ByteList(xBytes, false));
于 2015-07-13T04:22:20.303 回答