FileWriterとBufferedWriterのJavaの違い
2023-12-09 17:17:10
質問
それらの違いは何ですか?私はJava ATMを学んだばかりですが、私は両方の方法すなわちファイルに書き込むことができるように思えます(私はここでtry-catchブロックをコピーしませんでした)。
FileWriter file = new FileWriter("foo.txt");
file.write("foobar");
file.close();
と
FileWriter file = new FileWriter("foo.txt");
BufferedWriter bf = new BufferedWriter(file);
bf.write("foobar");
bf.close();
データを先にバッファリングするという概念は理解できたので、最初の例では文字を1つずつ書き込み、2番目の例ではそれをメモリにバッファリングして一度書き込むということでしょうか?
どのように解決するのですか。
BufferedWriterは、以下のような場合、より効率的です。
- フラッシュ/クローズ間に複数の書き込みがある
- バッファサイズに比べ書き込みが小さい。
あなたの例では、書き込みは一回だけなので、BufferedWriterは必要ないオーバーヘッドを追加するだけです。
ということは、最初の例では文字を一つずつ書き込み、2番目の例ではメモリにバッファリングして一度だけ書き込むということでしょうか?
どちらの場合も、文字列は一度に書き込まれます。
FileWriterだけを使っている場合、write(String)の呼び出しは
public void write(String str, int off, int len)
// some code
str.getChars(off, (off + len), cbuf, 0);
write(cbuf, 0, len);
}
これは、write(String)の呼び出しごとに、1つのシステムコールを行います。
BufferedWriterが効率を向上させるのは、複数の小さな書き込みの場合です。
for(int i = 0; i < 100; i++) {
writer.write("foorbar");
writer.write(NEW_LINE);
}
writer.close();
BufferedWriter を使用しないと、200 (2 * 100) 回のシステムコールとディスクへの書き込みが発生し、非効率的です。BufferedWriter を使用すると、これらはすべて一緒にバッファリングされ、デフォルトのバッファ サイズが 8192 文字であるため、書き込みのためのシステム コールは 1 回だけとなります。
関連
-
Junitのユニットテストエラー
-
eclipse にリソースリーク:'in' が閉じない
-
Java:未解決コンパイル問題の解決方法
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] StringBuilderとStringBufferの違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Eclipse の問題 アクセス制限。タイプ 'jfxrt' はAPI解決されていません。
-
ブートレイヤーの初期化中にエラーが発生しました java.lang.module.FindException: モジュールが見つかりません
-
StringBuilderが投げるArrayIndexOutOfBoundsExceptionの探索
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
-bash: java: コマンドが見つからない 解決方法
-
keytool error: java.io.FileNotFoundException: cacerts (アクセス拒否されました。)
-
Java基礎編 - オブジェクト指向
-
eclipse にリソースリーク:'in' が閉じない
-
eclipse 実行 Java、エラー: 選択を起動できず、レシーバーもありません。
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない