Package org.zeromq

Class ZMsg

  • All Implemented Interfaces:
    Iterable<ZFrame>, Collection<ZFrame>, Deque<ZFrame>, Queue<ZFrame>

    public class ZMsg
    extends Object
    implements Iterable<ZFrame>, Deque<ZFrame>
    The ZMsg class provides methods to send and receive multipart messages across 0MQ sockets. This class provides a list-like container interface, with methods to work with the overall container. ZMsg messages are composed of zero or more ZFrame objects.
     // Send a simple single-frame string message on a ZMQSocket "output" socket object
     ZMsg.newStringMsg("Hello").send(output);
     
     // Add several frames into one message
     ZMsg msg = new ZMsg();
     for (int i = 0; i < 10; i++) {
         msg.addString("Frame" + i);
     }
     msg.send(output);
     
     // Receive message from ZMQSocket "input" socket object and iterate over frames
     ZMsg receivedMessage = ZMsg.recvMsg(input);
     for (ZFrame f : receivedMessage) {
         // Do something with frame f (of type ZFrame)
     }
     
    Based on zmsg.c in czmq
    • Constructor Detail

      • ZMsg

        public ZMsg()
        Class Constructor
    • Method Detail

      • destroy

        public void destroy()
        Destructor. Explicitly destroys all ZFrames contains in the ZMsg
      • contentSize

        public long contentSize()
        Return total number of bytes contained in all ZFrames in this ZMsg
        Returns:
      • addString

        public void addString​(String str)
        Add a String as a new ZFrame to the end of list
        Parameters:
        str - String to add to list
      • duplicate

        public ZMsg duplicate()
        Creates copy of this ZMsg. Also duplicates all frame content.
        Returns:
        The duplicated ZMsg object, else null if this ZMsg contains an empty frame set
      • wrap

        public void wrap​(ZFrame frame)
        Push frame plus empty frame to front of message, before 1st frame. Message takes ownership of frame, will destroy it when message is sent.
        Parameters:
        frame -
      • unwrap

        public ZFrame unwrap()
        Pop frame off front of message, caller now owns frame. If next frame is empty, pops and destroys that empty frame (e.g. useful when unwrapping ROUTER socket envelopes)
        Returns:
        Unwrapped frame
      • send

        public void send​(ZMQ.Socket socket)
        Send message to 0MQ socket.
        Parameters:
        socket - 0MQ socket to send ZMsg on.
      • send

        public void send​(ZMQ.Socket socket,
                         boolean destroy)
        Send message to 0MQ socket, destroys contents after sending if destroy param is set to true. If the message has no frames, sends nothing but still destroy()s the ZMsg object
        Parameters:
        socket - 0MQ socket to send ZMsg on.
      • recvMsg

        public static ZMsg recvMsg​(ZMQ.Socket socket)
        Receives message from socket, returns ZMsg object or null if the recv was interrupted. Does a blocking recv, if you want not to block then use the ZLoop class or ZMQ.Poller to check for socket input before receiving or recvMsg with flag ZMQ.DONTWAIT.
        Parameters:
        socket -
        Returns:
      • recvMsg

        public static ZMsg recvMsg​(ZMQ.Socket socket,
                                   int flag)
        Receives message from socket, returns ZMsg object or null if the recv was interrupted. Does a blocking recv, if you want not to block then use the ZLoop class or ZMQ.Poller to check for socket input before receiving.
        Parameters:
        socket -
        flag - see ZMQ constants
        Returns:
      • save

        public static boolean save​(ZMsg msg,
                                   DataOutputStream file)
        Save message to an open data output stream. Data saved as: 4 bytes: number of frames For every frame: 4 bytes: byte size of frame data + n bytes: frame byte data
        Parameters:
        msg - ZMsg to save
        file - DataOutputStream
        Returns:
        True if saved OK, else false
      • load

        public static ZMsg load​(DataInputStream file)
        Load / append a ZMsg from an open DataInputStream
        Parameters:
        file - DataInputStream connected to file
        Returns:
        ZMsg object
      • newStringMsg

        public static ZMsg newStringMsg​(String... strings)
        Create a new ZMsg from one or more Strings
        Parameters:
        strings - Strings to add as frames.
        Returns:
        ZMsg object
      • dump

        public void dump​(Appendable out)
        Dump the message in human readable format. This should only be used for debugging and tracing, inefficient in handling large messages.
      • toString

        public String toString()
        Convert the message to a string, for use in debugging.
        Overrides:
        toString in class Object
      • addFirst

        public void addFirst​(String stringValue)
      • addFirst

        public void addFirst​(byte[] data)
      • addLast

        public void addLast​(String stringValue)
      • addLast

        public void addLast​(byte[] data)
      • push

        public void push​(String str)
      • push

        public void push​(byte[] data)
      • add

        public boolean add​(String stringValue)
      • add

        public boolean add​(byte[] data)
      • popString

        public String popString()
        Pop a ZFrame and return the toString() representation of it.
        Returns:
        toString version of pop'ed frame, or null if no frame exists.