operator << отформатирует ваши данные как текст. В то время как write будет выводить данные в том же формате, в котором они хранятся в оперативной памяти. Итак, если вы пишете двоичные файлы, вы хотите использовать write. </p>
Однако, если вы пишете не для стручков, вам следует быть осторожным. Вы не можете просто сказать:
write( &mystring, sizeof(std::string) );
У вас должен быть какой-то способ вывода фактических данных, которые не хранятся в классе или самой структуре.