2012-06-01 59 views
1

我需要從JNI調用的java方法中傳出一個數組和一個整數。通過引用從java返回JNI

public static int foo(byte[] data) 
{ 
    byte[] buffer; 
    // Fill buffer with data 
    data = buffer; // <--- This doesn't work as the pointer is changed 
    return bufferSize; 
} 

在這行表示,它是我的理解,指針被改變,但我有JNI來data我在通過參考不更新,所以我沒有得到新的數據。

我該如何去通過參數返回額外的數據?

+0

您需要傳遞對象,並使用它們的setter來修改它們的值。 –

+1

好吧,如果我想通過參數返回一個整數,那''Integer'是不可變的嗎? – DrYap

+0

你將不得不把一個包裝器作爲一個參數,它包含一個對'Integer'的引用,並分配這樣的新的Integer。如果你可以重構你的代碼不這樣做會更好。 –

回答

0

Credit to K-ballo:

字節數組需要在包裝類中。

class ByteArrayWrapper { 
    public ByteArrayWrapper() {} 
    public byte[] array; 
} 

在JNI中,我創建了這個類的一個實例並將其傳遞給該方法。

public static int foo(ByteArrayWrapper data) { 
    byte[] buffer; 
    // Fill buffer with data 
    data.array = buffer; 
    return bufferSize; 
} 

ByteArrayWrapper在JNI實例現在包含它可以通過使用jfieldID該屬性被訪問的新的字節數組。