なぜstd::io::Read
のメソッド、つまりread_to_end
、read_to_string
、およびread_exact
が結果を返すのではなくバッファを使用するのですか?現在の戻り値はResult<usize>
(またはResult<()>
)ですが、代わりに結果を含むタプルにすることはできませんか?なぜstd :: io :: Readの関数がバッファを取るのですか?
2
A
答えて
3
RFC 517は、これらの機能について説明し、関数は値を返すの上にバッファを取る理由には二つの理由について説明します。
パフォーマンスを。読み取りにいくつかの多数のバイトが含まれることが分かっているときは、バッファを事前に事前に割り当てることができます。
「原子性」が懸念されます。 read_to_endでは、途中で読み込みに失敗した場合でも、このAPIを使用してこれまでに収集されたデータを保持することができます。 read_to_stringの場合はそうではありません。そのような場合はUTF-8の妥当性を保証できないためです。中間結果が必要な場合は、read_to_endを使用して、最後にのみStringに変換できます。第一の点について
、文字列は、関連する機能String::with_capacity
を用いて事前に割り当てることができます。非常によく似た関数がベクトルのために存在する:Vec::with_capacity
。
関連する問題
- 1. なぜprintfのデータをread()関数でバッファに格納していないのですか?
- 2. Vecまたはスライスから(std :: io :: Read)を読むには?
- 3. std :: io :: readにキャスト&[u8]が原因の問題が発生しました。
- 4. イテレータ用のstd :: io :: Readを実装するには<Item=String>?
- 5. std :: applyが汎用関数で失敗するのはなぜですか?
- 6. なぜstd :: copy_nはstd :: size_tではなくテンプレートパラメータを取るのですか?
- 7. FileInputStreamのJava読み込みメソッド - なぜread()とread(byte [] b)の数字が異なるのですか?
- 8. 'Seek'が実装されていない場合、 'std :: io :: Read'特性からデータを進めるには?
- 9. read()関数がファイル内のすべてのデータを削除するのはなぜですか?
- 10. なぜread()の戻り値の型は整数ですか?
- 11. std :: unordered_setのstd :: hash関数で大文字と小文字を区別しないのはなぜですか?
- 12. std :: condition_variableなぜstd :: mutexが必要なのですか
- 13. なぜboost :: asio :: readバッファのデータサイズが読み込みサイズよりも小さいのですか?
- 14. read()関数内のリミットバッファ
- 15. 関数自体が結果を返すときにWebSocket.ReceiveAsync()にバッファが必要なのはなぜですか?
- 16. なぜstd :: moveはrvalue参照を引数として取るのですか?
- 17. なぜstd :: allocatorはメンバータイプ/関数をC++で失うのですか17?
- 18. std :: distanceなどのstd関数をオーバーロードするのは合理的ですか?
- 19. std :: sortの比較関数が常にtrueを返すと、ランタイムエラーが発生するのはなぜですか?
- 20. setvbuf()関数がCのバッファに増加を追加するのはなぜですか?
- 21. なぜstd :: uncaught_exceptionをstd :: uncaught_exceptionsに変更するのですか?
- 22. std :: unordered_mapをなぜstd :: partitionできないのですか?
- 23. なぜstd :: to_stringの実装は、型のサイズの4倍のバッファを作成するのですか?
- 24. read()操作後の空のバッファ
- 25. CancelIo関数が失敗するのはなぜですか?
- 26. std :: stoulが負の数を変換するのはなぜですか?
- 27. std :: coutが自分の変数を変更するのはなぜですか?
- 28. 引数が等しいときにstd :: sort compare関数がfalseを返す必要があるのはなぜですか? STDでは
- 29. readで関数の定義がシェルをブロックしています
- 30. Linuxでのread(2)呼び出しがディスクIOに費やされる時間よりも数ミリ秒多く費やされるのはなぜですか?