JRuby Java扩展中字符串xor的字节[]到RubyString
我试图为JRuby实现一个Java扩展来执行字符串异或。我只是不确定如何将字节数组强制转换为JRuby Java扩展中字符串xor的字节[]到RubyString,java,jruby,jruby-java-interop,Java,Jruby,Jruby Java Interop,我试图为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 = yByte
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?
}
公共静态RubyString xor(线程上下文、IRubyObject自身、RubyString x、RubyString y){
字节[]xBytes=x.getBytes();
字节[]yBytes=y.getBytes();
int length=yBytes.length
另外,如何在适当的位置执行相同的操作(即,
x
s值被更新)?您首先需要将字节包装在一个:新字节列表中(xBytes,false)
。最后一个参数(Boolean copy
)指示是否包装字节数组的副本
要就地更新字符串,请使用[RubyString#setValue()][2]
:
x.setValue(new ByteList(xBytes, false);
return x;
要返回新的RubyString
,可以将该列表传递到当前运行时的:
返回context.runtime.newString(新的字节列表(xBytes,false))代码>RubyString上有一些构造函数接受字节[]
这里org.jruby.RubyString.RubyString(Ruby runtime,RubyClass,byte[]值)
不确定这是否适用于此实例?看起来很有希望。知道rubyClass
参数应该是什么吗?不幸的是,不确定该参数。我已经使用Jruby很多年了,但以前从未尝试过编写扩展。访问freenode irc上的#jruby频道可能是获取更多信息的最快方式这是什么?解释一下就好了。如果你不想这样做,发表评论。
return context.runtime.newString(new ByteList(xBytes, false));