Я не уверен, что вы спрашиваете.Код, который вы публикуете, не читает сериализованные данные "известного формата или порядкового номера".Он копирует байты из файла в любое место, что может привести к неопределенному поведению, и очень маловероятно, что оно приведет к правильным значениям, если по какой-то странной случайности «известный формат» точно соответствует тому, который используется внутри вашей машины.Во многих случаях, на самом деле, это может привести к аварийному завершению программы;подумайте о том, что может произойти, если структура, которую вы пытаетесь прочитать, содержит указатель, например.
Я мог бы добавить, что перегрузка '>' для этого ужасного злоупотребления перегрузкой;если вы хотите прочитать специальный формат, логичный способ сделать это - определить соответствующий класс (например, ixdrstream
) и перегрузить его >>.(ixdrstream
вероятно будет производным от std::basic_ios<char>
, конечно, и почти наверняка будет использовать стандарт streambuf
для фактического ввода.)
И, конечно, вы никогда не перегружаетесь на std::fstream
, а скореена std::istream
(или std::ostream
для вывода).(FWIW, я не думаю, что когда-либо использовал std::fstream
. Идиома потока действительно не поддерживает смешивание чтения и записи элегантно.)