io interface(no pure style)