zl程序教程

您现在的位置是:首页 >  后端

当前栏目

[javaSE] IO流(管道流)详解编程语言

JavaSEIO编程语言 详解 管道
2023-06-13 09:20:37 时间

之前我们使用io流,都是需要一个中间数组,管道流可以直接输入流对接输出流,一般和多线程配合使用,当读取流中没数据时会阻塞当前的线程,对其他线程没有影响

 

定义一个类Read实现Runable接口,实现run()方法,构造方法传递PipedInputStream对象

读取流里面的数据

定义一个类Write实现Runable接口,实现run()方法,构造方法传递PipedOutputStream对象

写入流里面数据

 

获取PipedInputStream对象,new出来

获取PipedOutputStream对象,new出来

调用PipedInputStream对象的connect()方法,对接输出流,参数:PipedOutputStream对象

 

开启两个线程执行读写

import java.io.IOException; 

import java.io.PipedInputStream; 

import java.io.PipedOutputStream; 

 * 读取数据线程 

 * @author taoshihan 

class ReadPipe implements Runnable{ 

 private PipedInputStream in; 

 public ReadPipe(PipedInputStream in) { 

 this.in=in; 

 @Override 

 public void run() { 

 System.out.println("开始读取。。。如果没有数据会阻塞"); 

 byte[] b=new byte[1024]; 

 try { 

 int len=in.read(b); 

 String info=new String(b,0,len); 

 in.close(); 

 System.out.println(info); 

 } catch (IOException e) { 

 e.printStackTrace(); 

 * 写入数据线程 

 * @author taoshihan 

class WritePipe implements Runnable{ 

 private PipedOutputStream out; 

 public WritePipe(PipedOutputStream out) { 

 this.out=out; 

 @Override 

 public void run() { 

 System.out.println("开始写入。。。延迟5秒"); 

 try { 

 Thread.sleep(5000); 

 out.write("我是数据".getBytes()); 

 out.close(); 

 } catch (Exception e) { 

 e.printStackTrace(); 

public class PipeDemo { 

 /** 

 * @param args 

 * @throws IOException 

 public static void main(String[] args) throws IOException { 

 //连接管道 

 PipedInputStream in=new PipedInputStream(); 

 PipedOutputStream out=new PipedOutputStream(); 

 in.connect(out); 

 //开启线程 

 new Thread(new ReadPipe(in)).start(); 

 new Thread(new WritePipe(out)).start(); 

}

[javaSE] IO流(管道流)详解编程语言

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/12650.html

cjava