I прочитайте , что рекомендуется обернуть io читателей и писателей в BufRead
и BufWrite
, чтобы не полагаться на слишком много системных вызовов. Я также понимаю, что это примерно производительность .
Мне нужно прочитать данные из io::stdin
и напрямую записать их в TcpStream
. Точно так же мне нужно прочитать данные из TcpStream
и напрямую записать их в io::stdout
. Под «напрямую» я имею в виду, что мне не нужно, чтобы все эти данные записывались в память.
Я думаю, что io::copy
- это функция, которая мне нужна для подключения читателей к писателям таким образом .
Однако мне интересно, будет ли хорошей практикой buffer
оба конца потоков подключены к io::copy
:
- Это хорошо, потому что ограничивает количество системных вызовов, необходимых для передачи всех данных, верно?
- Это плохо, потому что для передачи требуется больше копий данных, , то есть
stdin -> BufReader -> BufWrite -> TcpStream
вместо stdin -> TcpStream
, и наоборот TcpStream -> BufRead -> BufWrite -> stdout
вместо TcpStream -> stdout
, это тоже правильно?
Какой здесь компромисс? Стоит ли буферизовать конец потоков, к которым присоединяется io::copy
или нет?
Как это зависит от объема данных, в сети или в системе?