確かStreamのchar[]の読み書きデータは
文字列の長さ(size_tのサイズ)のあとに実際の文字列が入るやつだから
前者はサイズ(おそらく4byte)がなくて読み込めず
後者は最初の4byteを読み込むべき文字列の長さと勘違いして膨大なデータを読もうとしてる
一度適当なファイルにfile.write("hoge");としてバイナリエディタで覗いてみるとわかりやすい