Очередь - это концепция более высокого уровня, чем поток. Базовыми элементами очереди является сообщение / объект, который представляет собой согласованную (обычно типизированную) структуру данных, которая может быть интерпретирована потребителем самостоятельно. С другой стороны, в основе потока есть биты / байты / символы (обычно фиксированного размера), что само по себе обычно бессмысленно для приложения. Последовательность этих символов может составлять «сообщение», но потоковый API оставляет его приложению, чтобы разделить последовательность символов на разумные куски.
Stream API обычно также позволяет частичное чтение и запись, если потоковые буферы заполнены, а другая сторона не выполняет чтение / запись; приложения, обрабатывающие очереди, обычно ожидают, что очередь обработает их внутренне.
Очередь может быть реализована поверх потока, это осуществляется с помощью кадрирования сообщений. Например, TCP предоставляет потоковый интерфейс, HTTP построен поверх TCP и добавляет кадрирование сообщений с использованием Content-Length / chunked Transfer Encoding. Пользователи API-интерфейса HTTP-соединения абстрагируются от разделения потока HTTP-соединения на HTTP-запросы.
С другой стороны, обычно не имеет смысла реализовывать потоковый API поверх очереди, так как обработка кадров сообщения добавляет ненужные накладные расходы.