2 つの Android デバイス間のソケットを介して 500,000 int の配列を送信する必要があります。現在、私は int[] を byte[] に変換して、Java のソケットがそれを受け入れるようにするのに多くの時間を費やしています (以前の質問Efficiently send large int[] over sockets in Java を参照してください。より高速な方法はないと判断しました)。 Java で型キャストを行うため)。
私の質問は、int[] を取得して JNI を介して Android NDK に渡すと、ネイティブ コードで byte[] への型キャストがより高速になることを期待できますか? int* から char* への型キャストは、昔ながらの C では非常に簡単であることは知っていますが、JNI がパフォーマンスの向上を無効にするかどうか疑問に思っています。
さらに、ネイティブ コードで byte[] を取得したら、それを効率的に Java コードに戻すことができますか、それとも C でもソケットを実装する必要がありますか?
編集 1: 人々はリンクをクリックせずに多くの回答を投稿しています。ByteBuffers を使用するのは適切なオプションではありません。実際には、マスク アンド シフトよりもはるかに遅く、パフォーマンスが重要なコードのニーズよりもはるかに遅いです。そのため、NDK について質問しています。
編集 2: 上記のテキストを変更して、C コードは int[] から byte[] ではなく int* から char* にキャストできると述べました。うまくいけば、それは質問を明確にします。
編集 3: 私のユースケースを明確にするために、これは int の大きな配列を複数のデバイスに分散させ、リストを並行してソートするという研究上の問題です。Java に 500,000 個の int があり (どこから来たかは関係ありません)、できるだけ早くソケットを介してデバイスから取り出す必要があるとします。「int の配列から始めないでください」という回答は役に立ちません。さらに、私のアプリケーション コードは、可能な限り 100% Java に近づける必要があります。ネイティブの型キャストとソケットがパフォーマンスを改善する場合、それは問題ありませんが、他のこと (つまり、並べ替え) をネイティブで行うことはできません。