A look at the implementation of FileStream in Foundation or SocketStream in the Net library should make it quite clear how to use BufferedBidirectionalStreamBuf. Basically, you pass the size of the internal buffer, as well as the mode (input, output or both) to the constructor. readFromDevice() should simply try to read the given number of bytes from the underlying device and place it into the given buffer. Reading fewer bytes than requested is okay.
Regarding CountDownLatch, I am afraid we don't have this in POCO. What comes closes, though, is the Poco::Event class. You should be able to build a CountDownLatch on top of that by combining a Poco::Event (manual reset) with a counter and a Mutex to protect the counter.