3

JRuby が文字列 xor を実行するための 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ですか (つまり、値が更新されます)。

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;

new を返すには、RubyStringそのリストを現在のランタイムの に渡すことができます#newString():

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