एक कतार एक धारा की तुलना में एक उच्च स्तर की अवधारणा है। एक कतार के आधार तत्व एक संदेश / वस्तु है, जो एक सुसंगत (आमतौर पर टाइप) डेटा संरचना है जो उपभोक्ता द्वारा स्वयं व्याख्या की जा सकती है। दूसरी ओर, एक धारा के आधार पर , (आमतौर पर निश्चित आकार के) बिट्स / बाइट्स / वर्ण होते हैं, जो अपने आप ही, आमतौर पर आवेदन के लिए अर्थहीन होता है। इन पात्रों का एक क्रम एक "संदेश" लिख सकता है, लेकिन एक धारा एपीआई इसे वर्णों के अनुक्रम को संवेदी विखंडू में विभाजित करने के लिए आवेदन पर छोड़ देता है।
स्ट्रीम API आमतौर पर आंशिक रीड और लिखने की भी अनुमति देता है, यदि स्ट्रीम बफ़र भरे हुए हैं और दूसरा पक्ष रीड / राइटिंग नहीं कर रहा है; अनुप्रयोग जो कतार को संभालते हैं वे आमतौर पर कतार को इन आंतरिक रूप से संभालने की अपेक्षा करते हैं।
एक धारा के शीर्ष पर एक कतार लागू की जा सकती है, यह संदेश फ़्रेमिंग को लागू करने के द्वारा किया जाता है। उदाहरण के लिए, टीसीपी एक स्ट्रीम इंटरफ़ेस प्रदान करता है, HTTP टीसीपी के शीर्ष पर बनाया गया है, और सामग्री-लंबाई / chunked हस्तांतरण एन्कोडिंग का उपयोग करके संदेश फ़्रेमिंग जोड़ता है। HTTP कनेक्शन API के उपयोगकर्ता HTTP अनुरोधों को HTTP कनेक्शन स्ट्रीम को विभाजित करने से निपटने से अमूर्त हैं।
दूसरी ओर, आमतौर पर, यह एक कतार के शीर्ष पर एक स्ट्रीम एपीआई को लागू करने के लिए कम समझ में आता है, क्योंकि संदेश फ़्रेमिंग का संचालन अनावश्यक ओवरहेड जोड़ता है।