Using direct=y makes export work faster, the conventional way of evaluating the buffer before it is written to the export file is skipped in this case, hence it is faster.
There are certain cases in which you can't use direct=y, some of them are
you cannot use them in interactive export mode,
in version prior to 8.1.5 tables with objects and LOBs cannot be used with direct option.

The size of the buffer is calculated in bytes, this tells oracle the size of the buffer it should use to fetch records at a time, so if you want to fetch 100 rows with a arraysize of 56 your buffersize = arraysize*no. of rows.

Rama