コードを Java から C# に移植する必要があります。Javaコードでは「ByteBuffer.flip()」と「ByteBuffer.slice」というメソッドが使われているのですが、これをどう訳せばいいのかわかりません。
私はこの質問を読みました( c# の javax.nio.Buffer.flip() に相当します)が、答えは示されていますが、それを適用する方法がわかりません。Tom Hawtin によると、基になる配列で「制限を現在の位置に設定してから、位置をゼロに設定する」必要があります。これらの値を変更する方法がわかりません。(根底にあるロジックを説明できれば、とても助かります:)
ByteBuffer.slice については、翻訳方法がわかりません。
編集:実際のコードでより明確にできる場合は、投稿します:
ジャワ:
ByteBuffer buff;
buff.putShort((short) 0);
buff.put(customArray);
buff.flip();
buff.putShort((short) 0);
ByteBuffer b = buff.slice();
short size = (short) (customFunction(b) + 2);
buff.putShort(0, size);
buff.position(0).limit(size);
これまでのところ、C#.NET での私の翻訳:
BinaryWriter b = new BinaryWriter(); //ByteBuffer buff;
b.Write((short)0); // buff.putShort((short) 0);
b.Write(paramStream.ToArray()); // buff.put(customArray);
b.BaseStream.SetLength(b.BaseStream.Position); // buff.flip; (not sure)
b.BaseStream.Position = 0; // buff.flip; too (not sure)
b.Write((short)0); // buff.putShort((short) 0)
??? // ByteBuffer b = buff.slice();
// Not done but I can do it, short size = (short) (customFunction(b) + 2);
??? // How do I write at a particular position?
??? // buff.position(0).limit(size); I don't know how to do this
ありがとうございました!
編集: Java ドキュメントに基づいて に変更b.BaseStream.SetLength(b.BaseStream.Length);
されました。b.BaseStream.SetLength(b.BaseStream.Position);