Хотя есть способы, чтобы сказать, является ли это вероятно, что поток представляет собой поток рассола (например, первый байт всегда \x80
, а затем номер протокола, здесь \x03
, последние байты также всегда b'.'
), в общем, это трудно понять, что точно (совпадение первого байт \x80
в случайной строке). Так что лучше просто попытаться unpickle его и посмотреть, если это работает:
import pickle
def is_pickle_stream(stream):
try:
pickle.loads(stream)
return True
except UnpicklingError:
return False
выше метод будет возвращать True
, если поток представляет собой поток рассола, False
если это не так, и бросать исключение, если loads
бросает исключение (из памяти и т. д.).
Вы можете попытаться ее разложить, и если это не удается увидеть, это нераспределенные данные. Pickle имеет заголовок, но совпадение может заключаться в том, что двоичная строка имеет один и тот же заголовок. –
[* «Просить прощения легче, чем разрешение». *) (Https://docs.python.org/3/glossary.html#term-eafp) – jonrsharpe