问题描述
多个线程之间可以通过管道流实现数据的传输,利用管道输入流(PipedInputStream)和管道输出流(PipedOutputStream)创建两个线程,一个线程从文件中读取数据,从管道输出流输出,另一个线程从管道输入流中取出文件据,并保存到本地自己任意指定的文件中。实现文件的传输功能。
设计思路
- 创建管道输入流和输出流对象,并将其连接;
- 创建线程一,将本地文件读取到管道输出流中;
- 创建线程二,在管道输入流中接收文件到本地。
完整源代码
package PipeStream;
import java.io.*;
public class Main {
public static void main(String[] args)throws Exception{
final PipedInputStream pis = new PipedInputStream();
final PipedOutputStream pos = new PipedOutputStream();
pos.connect(pis);
//文件读取线程
new Thread(()->{
try{
File file = new File("D:\\File\\Others\\source\\monkey.txt");
FileInputStream in = new FileInputStream(file);
int b;
while(true){
b=in.read();
pos.write(b);
if(b==-1) break;
}
System.out.println("文件输入成功");
pos.close();
in.close();
}catch(Exception e){System.out.println("错误信息为:"+e.getMessage());}
}).start();
//文件输出线程
new Thread(()->{
try{
File file = new File("D:\\File\\Others\\target\\monkey.txt");
OutputStream out = new FileOutputStream(file);
int len;
while((len=pis.read())!=-1) out.write(len);
System.out.println("文件输出成功");
pis.close();
out.close();
}catch(Exception e){System.out.println("错误信息为:"+e.getMessage());}
}).start();
}
}