java的管道流,两个线程,输出流输出数据,输入流就是不读取
关注:283 答案:3 手机版
解决时间 2021-01-24 21:36
提问者雨份凉伴
2021-01-24 01:02
代码如下:
import java.io.*;
public class TestPipeIoStream
{
public static void main( String[] args ) throws Exception
{
PipedOutputStream pos = new PipedOutputStream();
PipedInputStream pis = new PipedInputStream();
pis.connect(pos);
ThreadSend ts = new ThreadSend(pos);
ThreadRecv tr = new ThreadRecv(pis);
new Thread(ts).run();
new Thread(tr).run();
}
}
class ThreadSend implements Runnable
{
PipedOutputStream pos;
FileInputStream fis ;
ThreadSend( PipedOutputStream p )
{
pos = p;
}
public void run()
{
try
{
System.out.println("len=");
fis = new FileInputStream("TestPipeIoStream.java");
byte[] buf = new byte[100];
int len;
while( (len=fis.read(buf)) >0 )
{
System.out.println("len="+len);
pos.write( buf );
pos.flush();
//System.out.printf(new String(buf,0,len));
}
pos.close();
fis.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
}
class ThreadRecv implements Runnable
{
PipedInputStream pis;
ThreadRecv( PipedInputStream p )
{
pis = p;
}
public void run()
{
try
{
byte[] buf = new byte[100];
int len=0;
while( ( len = pis.read(buf) ) >0 )
{
System.out.println("recv len="+len);
System.out.println(new String(buf,0,len));
}
pis.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
}
最佳答案
二级知识专家云朵有点甜
2021-01-24 01:09
线程启动要调start方法, 你调run方法相当于只有一个主线程, 因此输出一部分数据后线程就被就阻塞了, 所以只要将
new Thread(ts).run();
new Thread(tr).run();
改成
new Thread(ts).start();
new Thread(tr).start();
就行了
全部回答
1楼啾一口软脸
2021-01-24 03:22
PipedInputStream 需要调用其read()方法来读取文件中的字节
2楼蓝莓九栀
2021-01-24 02:40
你的程序没问题,路径搞错了,找不到文件
fis = new FileInputStream("TestPipeIoStream.java");
你用了相对路径,你应该用了IDE,编译后的文件和源文件是不在同一个文件夹下面的,所以找不到文件,你用绝对路径肯定没问题
我要举报
如以上信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
推荐资讯
大家都在看