import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
public class PipedThread {
public static void main(String[] args) {
//新建管道输出流、输入流
PipedOutputStream out = new PipedOutputStream();
PipedInputStream in = null;
try {
//连接两个流资源
in = new PipedInputStream(out);
//新建两个线程,并把main中声明的流通过构造器赋值给读、写线程,使两线程联通
PipedReadThread r = new PipedReadThread(in, "读");
PipedWriteThread w = new PipedWriteThread(out, "写");
//启动两线程
r.start();
w.start();
//让main线程等待两线程,以防提前关闭流资源
r.join();
w.join();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 写线程
* 从控制台输入 写出到管道中
* InputStream PipedOutputStream
* */
class PipedWriteThread extends Thread{
//新建参数
private PipedOutputStream out = null;
//构造器赋值
public PipedWriteThread(PipedOutputStream out, String name) {
super(name);
this.out = out;
}
//重写run方法
@Override
public void run() {
InputStream in = null;
in = System.in;//控制台输入
int len = -1;
try {
while((len = in.read())!=-1){//循环输入
out.write(len);
out.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 读线程
* 从管道中读入 写出到文件中
* PipedInputStream FileOutputStream
* */
class PipedReadThread extends Thread{
//新建参数
private PipedInputStream in = null;
//构造器赋值
public PipedReadThread(PipedInputStream in, String name) {
super(name);
this.in = in;
}
//重写run方法
@Override
public void run() {
File f = new File("src/piped.txt");//定义一个File类型对象引用
FileOutputStream out = null;
try {
out = new FileOutputStream(f);//输出到文件中,默认覆盖内容
// out = new FileOutputStream(f, true);//输出到文件中,并追加在文件末尾
int len = -1;
while((len = in.read())!=-1){
out.write(len);
out.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用管道流和线程实现:控制台不断输入,并输出到文件中
最新推荐文章于 2021-08-22 15:31:23 发布