複数のスレッドがファイルに書き込むときにBufferReaderでファイルを読み取る

Joe.wang

すべて、私は複数のスレッドによって書き込まれるファイルを読み取ろうとしBufferedReaderています。スレッドでそのファイルを読み取るために使用します。

コードは次のようになります。

FileReader reader = new FileReader(file);
BufferedReader br = new BufferedReader(reader);
String detail;
while ((detail =br.readLine()) != null)
{
   ...
}

現在は問題なく動作しているようです。しかし、私はそれについていくつか質問があります。質問がばかげているように聞こえる場合。私を笑わないでください。ありがとう。

ループが壊れたことがない可能性はありますか?他のスレッドがファイルに書き込んでいるので、おそらくはreadLine()nullを返さない可能性がありますか?

更新しました

3つのスレッド(T1、T2、T3)があるとしましょう。

T1とT2はライターです。

T3はリーダーです。

コードは以下の順序で実行されます。

1.現在のファイル行数は100です。

2.T1はファイルに行を書き込みます(ファイル行は101に増加します)

3.T3はファイル(101)の最後の行を読み取ります。次の読み取りはnullになります。

4.T2ファイルに行を追加します(ファイル行は102に増加します)

5.T3が再度読み取られます...(T3が再度読み取られる前にT2がファイルに新しい行を追加したため、nullが返されるかどうかはわかりません。)

事前に確認してください。ありがとうございます。

奪う

はい、ループが決して終了しない可能性があります(少なくともメモリが不足するまで)。これを証明するコードは次のとおりです。

public class test {

    public static void main(String[] args) {
// start thread to write to file
        new Thread(new Runnable() {
            @Override
            public void run() {
                FileWriter writer;
                try {
                    int i = 1;
                    writer = new FileWriter("D:\\text.txt");
                    writer.append("line"+ i++ + "\n");
                    writer.flush();
                    while (true)
                    {
                        writer.append("line"+ i++ + "\n");
                        writer.flush();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }).start();

        try {
            Thread.sleep(500);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        // start thread to read file
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    FileReader reader = new FileReader("D:\\text.txt");
                    BufferedReader br = new BufferedReader(reader);
                    String detail;
                    while ((detail =br.readLine()) != null)
                    {
                        System.out.println(detail);
                    }
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }).start();

    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

BufferReaderから読み取り、ファイルに書き込む

分類Dev

スレッド2が同じファイルに書き込むときに、スレッド1はファイルから読み取ります

分類Dev

C ++-複数のスレッドをファイルに書き込む方法

分類Dev

Pythonの複数のスレッドによるjsonファイルの読み取りと書き込みの並行性

分類Dev

NodeJS-複数のファイルを非同期で読み取り、読み取った内容を1つのファイルに書き込む方法

分類Dev

ファイルを読み取り、別のファイルに書き込む

分類Dev

ファイルから読み取るのと同じ方法でファイルに書き込む

分類Dev

複数のnltkコーパスファイルを読み取り、Pythonで単一のテキストファイルに書き込む方法

分類Dev

複数のスレッドで(同時に、ファイルの異なる行に)データをテキストファイルに書き込む

分類Dev

複数のスレッドからファイルに書き込む

分類Dev

複数のスレッドが同時にファイルにデータを書き込むことはできますか?

分類Dev

Pythonの別のスレッドでファイルに数値を書き込んで同じ値を読み取る方法は?

分類Dev

特定の出力形式でPythonでマトリックス(1つのファイルから読み取る)を別のcsvファイルに書き込む方法

分類Dev

ファイルに書き込む複数のスレッドを同期する方法

分類Dev

Pythonを使用してファイルを読み取り、それを複数のテキストファイルに完全に書き込む方法は?

分類Dev

複数のスレッドを使用して複数のファイルにデータを書き込む

分類Dev

複数のスレッドから一時ファイルの読み取り/書き込み方法

分類Dev

ディレクトリ内のファイルを読み取り、ファイルに書き込む方法

分類Dev

読み取り専用のフォルダにファイルを書き込むことができるのはなぜですか?

分類Dev

誰かがファイルに書き込んだときにファイルを読み取る

分類Dev

誰かがファイルに書き込んだときにファイルを読み取る

分類Dev

複数のファイルをvimで開く読み取り専用と読み取りと書き込み

分類Dev

Cのファイルに書き込まれた行を読み取ることができません

分類Dev

Javaでマルチスレッド方式で複数のファイルに書き込む

分類Dev

ファイルから読み取り、nodejsの別のファイルに同じコンテンツを書き込むことができません

分類Dev

Python:CSVファイルを読み取り、別のテキストファイルに書き込む

分類Dev

Powerhellがファイルに書き込んでいる間にファイルを読み取ろうとするphpスクリプトの問題

分類Dev

Python 3.6 で csv ファイルに複数の行を書き込むときに問題が発生する

分類Dev

ロックなしで複数のスレッドからファイルに書き込む

Related 関連記事

  1. 1

    BufferReaderから読み取り、ファイルに書き込む

  2. 2

    スレッド2が同じファイルに書き込むときに、スレッド1はファイルから読み取ります

  3. 3

    C ++-複数のスレッドをファイルに書き込む方法

  4. 4

    Pythonの複数のスレッドによるjsonファイルの読み取りと書き込みの並行性

  5. 5

    NodeJS-複数のファイルを非同期で読み取り、読み取った内容を1つのファイルに書き込む方法

  6. 6

    ファイルを読み取り、別のファイルに書き込む

  7. 7

    ファイルから読み取るのと同じ方法でファイルに書き込む

  8. 8

    複数のnltkコーパスファイルを読み取り、Pythonで単一のテキストファイルに書き込む方法

  9. 9

    複数のスレッドで(同時に、ファイルの異なる行に)データをテキストファイルに書き込む

  10. 10

    複数のスレッドからファイルに書き込む

  11. 11

    複数のスレッドが同時にファイルにデータを書き込むことはできますか?

  12. 12

    Pythonの別のスレッドでファイルに数値を書き込んで同じ値を読み取る方法は?

  13. 13

    特定の出力形式でPythonでマトリックス(1つのファイルから読み取る)を別のcsvファイルに書き込む方法

  14. 14

    ファイルに書き込む複数のスレッドを同期する方法

  15. 15

    Pythonを使用してファイルを読み取り、それを複数のテキストファイルに完全に書き込む方法は?

  16. 16

    複数のスレッドを使用して複数のファイルにデータを書き込む

  17. 17

    複数のスレッドから一時ファイルの読み取り/書き込み方法

  18. 18

    ディレクトリ内のファイルを読み取り、ファイルに書き込む方法

  19. 19

    読み取り専用のフォルダにファイルを書き込むことができるのはなぜですか?

  20. 20

    誰かがファイルに書き込んだときにファイルを読み取る

  21. 21

    誰かがファイルに書き込んだときにファイルを読み取る

  22. 22

    複数のファイルをvimで開く読み取り専用と読み取りと書き込み

  23. 23

    Cのファイルに書き込まれた行を読み取ることができません

  24. 24

    Javaでマルチスレッド方式で複数のファイルに書き込む

  25. 25

    ファイルから読み取り、nodejsの別のファイルに同じコンテンツを書き込むことができません

  26. 26

    Python:CSVファイルを読み取り、別のテキストファイルに書き込む

  27. 27

    Powerhellがファイルに書き込んでいる間にファイルを読み取ろうとするphpスクリプトの問題

  28. 28

    Python 3.6 で csv ファイルに複数の行を書き込むときに問題が発生する

  29. 29

    ロックなしで複数のスレッドからファイルに書き込む

ホットタグ

アーカイブ