c# - Why set a bufferSize in the FileStream ctor, if we set it later when reading? -


the docs filestream constructor don't mention reason. says:

buffersize

type: system.int32

a positive int32 value greater 0 indicating buffer size. default buffer size 4096.

but later use methods such read in specify buffer size , supply buffer itself.

so why specify buffer size in constructor?

those different buffers. 1 internal buffer of filestream (size of pass constructor), , 1 caller's buffer (that 1 read). not related.

say pass 4000 constructor internal buffer size , call:

read(buffer, 0, 100); 

what happen (in simplified terms, , assuming first read stream) filestream go , read 4000 bytes file , store in it's internal buffer. write 100 bytes caller's buffer.

if do

read(buffer, 0, 8000) 

it go , read 4000 file internal buffer, write 4000 caller's buffer go again , read next 4000 file internal buffer, complete writing caller's one.

why have internal buffer? because it's expensive bother file system every small read. read filestream byte byte, 4000 times. bother filesystem once, rest 3999 return internal buffer.


Comments