diff --git a/pyasn1/codec/ber/decoder.py b/pyasn1/codec/ber/decoder.py
index 375c2ef9d9d3469e404833449d8ea11aa0686b1a_cHlhc24xL2NvZGVjL2Jlci9kZWNvZGVyLnB5..a9aad6c2985da05a97e87e6ea2b96291dbb1c78e_cHlhc24xL2NvZGVjL2Jlci9kZWNvZGVyLnB5 100644
--- a/pyasn1/codec/ber/decoder.py
+++ b/pyasn1/codec/ber/decoder.py
@@ -1471,6 +1471,9 @@
  stStop) = [x for x in range(10)]
 
 
+EOO_SENTINEL = ints2octs((0, 0))
+
+
 class SingleItemDecoder(object):
     defaultErrorState = stErrorCondition
     #defaultErrorState = stDumpRawValue
@@ -1487,7 +1490,6 @@
         # Tag & TagSet objects caches
         self.__tagCache = {}
         self.__tagSetCache = {}
-        self.__eooSentinel = ints2octs((0, 0))
 
     def __call__(self, substrate, asn1Spec=None,
                  tagSet=None, length=None, state=stDecodeTag,
@@ -1508,7 +1510,7 @@
                 if isinstance(eoo_candidate, SubstrateUnderrunError):
                     yield eoo_candidate
 
-            if eoo_candidate == self.__eooSentinel:
+            if eoo_candidate == EOO_SENTINEL:
                 if LOG:
                     LOG('end-of-octets sentinel found')
                 yield eoo.endOfOctets
diff --git a/pyasn1/codec/streaming.py b/pyasn1/codec/streaming.py
index 375c2ef9d9d3469e404833449d8ea11aa0686b1a_cHlhc24xL2NvZGVjL3N0cmVhbWluZy5weQ==..a9aad6c2985da05a97e87e6ea2b96291dbb1c78e_cHlhc24xL2NvZGVjL3N0cmVhbWluZy5weQ== 100644
--- a/pyasn1/codec/streaming.py
+++ b/pyasn1/codec/streaming.py
@@ -98,7 +98,10 @@
     : :py:class:`~pyasn1.error.PyAsn1Error`
         If the supplied substrate cannot be converted to a seekable stream.
     """
-    if isinstance(substrate, bytes):
+    if isinstance(substrate, io.BytesIO):
+        return substrate
+
+    elif isinstance(substrate, bytes):
         return io.BytesIO(substrate)
 
     elif isinstance(substrate, univ.OctetString):
@@ -225,7 +228,7 @@
         if received is None:  # non-blocking stream can do this
             yield error.SubstrateUnderrunError(context=context)
 
-        elif size != 0 and not received:  # end-of-stream
+        elif not received and size != 0:  # end-of-stream
             raise error.EndOfStreamError(context=context)
 
         elif len(received) < size: