Ok, I see this:

        /**
         * Receive a message in to a specified buffer.
         *
         * @param buffer
         *            byte[] to copy zmq message payload in to.
         * @param offset
         *            offset in buffer to write data
         * @param len
         *            max bytes to write to buffer.
         *            If len is smaller than the incoming message size,
         *            the message will be truncated.
         * @param flags
         *            the flags to apply to the receive operation.
         * @return the number of bytes read, -1 on error
         */
        public native int recv (byte[] buffer, int offset, int len, int flags);


Have no more questions   :)



2013/10/3 Artem Vysochyn <artem.vysoc...@gmail.com>:
> hi Trevor,
>
> Thanks for posting this. Very nice.
>
> Still curious. Does it mean that using DirectByteBuffer only makes
> sense if one uses ZMQ+Disruptor?
>
> Second question:
>>>...
>>> ByteBuffer bb = ByteBuffer.allocateDirect(4096);
>>> socket.recvByteBuffer(bb, 0);
>>>...
> I also had been thinking about such construction, but my question is
> -- what we win here? I.e. one still has to make a call to jzmq':
> byte[] buf = socket.recv(flag). So, we do jni call .recv() and get
> copy of byte[] from native code. Then we copy that byte[] into DBB.
> I'm not judging, but just trying to figure out for myself, what one
> could win with DBB for receiving operation?
>
>
> Thanks in advance.
> -artemv
>
> 2013/10/2 Trevor Bernard <trevor.bern...@gmail.com>:
>> It's fairly straightforward.
>>
>> ByteBuffer bb = ByteBuffer.allocateDirect(4096);
>> serialize(bb, someObj);
>> bb.flip();
>> socket.sendByteBuffer(bb, 0);
>> ...
>> ByteBuffer bb = ByteBuffer.allocateDirect(4096);
>> socket.recvByteBuffer(bb, 0);
>> bb.flip();
>> Object deserialized = deserialize(bb);
>>
>> In my use case, I use the LMAX Disruptor in conjunction with zeromq. I
>> preallocate the RingBuffer with off-heap ByteBuffers to reduce GC and
>> to create a pool. This also is more efficient since it had one less
>> copy and you are reusing the ByteBuffers.
>>
>> Something like this:
>>
>> public final static EventFactory<ByteBuffer> EVENT_FACTORY = new
>> EventFactory<ByteBuffer>() {
>>     public ByteBuffer newInstance() {
>>         return ByteBuffer.allocateDirect(4096);
>>     }
>> };
>>
>> On Wed, Oct 2, 2013 at 12:30 PM, Artem Vysochyn
>> <artem.vysoc...@gmail.com> wrote:
>>> hi Trevor,
>>>
>>> Can you past example(s) of how you use DirectByteBuffer in jzmq? pls.
>>>
>>> 2013/10/2 Trevor Bernard <trevor.bern...@gmail.com>:
>>>> I do that very thing with a different method signature.
>>>>
>>>> https://github.com/trevorbernard/zmq-jni/blob/master/src/main/c%2B%2B/zmq.cpp#L169
>>>>
>>>> I've had some success with preallocating a bunch of DirectByteBuffers
>>>> off heap. It definitely helps with performance and GC. If I use
>>>> byte[], it generates far too much garbage and generates too much GC
>>>> pressure.
>>>>
>>>> On Tue, Oct 1, 2013 at 9:33 PM, Radu Braniste <rbrani...@gmail.com> wrote:
>>>>> Personally I'm using the direct buffer as a  memory arena (I preallocate a
>>>>> pool)  and I avoid one allocation like:
>>>>>
>>>>>>     zmq_msg_t msg;
>>>>>>     zmq_msg_init (&msg);
>>>>>>     zmq_recvmsg ((void *) socket, &msg, flags);
>>>>>>     int size = zmq_msg_size (&msg);
>>>>>
>>>>> //might check for out of bounds and return false
>>>>>
>>>>>  memcpy(GetDirectBufferAccess(arena+used), zmq_msg_data (&msg), size);
>>>>>
>>>>> used += size;
>>>>>>     zmq_msg_close(&msg);
>>>>>>     return used;
>>>>>
>>>>> the best would be of course to use this technique with a possible
>>>>> "zmq_msg_init_data" as Peter suggested and completely avoid he extra 
>>>>> memcpy
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> zeromq-dev mailing list
>>>>> zeromq-dev@lists.zeromq.org
>>>>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>>>>
>>>> _______________________________________________
>>>> zeromq-dev mailing list
>>>> zeromq-dev@lists.zeromq.org
>>>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>> _______________________________________________
>>> zeromq-dev mailing list
>>> zeromq-dev@lists.zeromq.org
>>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev@lists.zeromq.org
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to