とても簡単な質問があります。
Java I/O スキームに基づいて、スレッドがデータを待っているときはいつでもブロックされるのでしょうか? それは本当ですか?このようなもの。
byte[] _buff=new byte[1024];
int _r=_in.read(_buff);//it blocks until some data is available
読み取りをあきらめる唯一の方法は、別のスレッドでストリームを閉じることです。それは正しいですか? このようなもの。
void run(){
_in.close();
}
上記のシナリオが正しければ、なぜこれが不可能なのかSystem.in
、ストリームを閉じて読み取り中のスレッドを中断するだけです。5 秒間待機するスレッドを実行してから、ストリームからの残りの読み取りを中断/放棄したいと考えています。
void _read_data(){
System.out.print("enter y to save the workspace ");
new Thread(_cancel_thread).start();
int _r=System.in.read();//blocks
}
///////////
void run(){
try{
Thread.sleep(5000);
System.in.close();//doesn't work.
}catch(Exception _ex){}
}
質問:
1.ストリームを閉じるには?! ストリームを閉じるスレッドがストリームを閉じることができないのはなぜですか?!
2.ストリームが閉じられたら、どうすれば再び開くことができますか?!