java启个线程加载数据,java的管道流,两个线程,输出流输出数据,输入流就是不读取...

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,编译后的文件和源文件是不在同一个文件夹下面的,所以找不到文件,你用绝对路径肯定没问题

我要举报

如以上信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!

推荐资讯

大家都在看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值