`
strawberry2013
  • 浏览: 17935 次
文章分类
社区版块
存档分类
最新评论

黑马程序员_IO流_管道输入流PipedInputStream和管道输出流PipedOutputStream

 
阅读更多

-------android培训java培训、期待与您交流! ----------


PipedInputStream类与PipedOutputStream类
PipedOutputStream可以向管道中写入数据,PipedIntputStream可以读取PipedOutputStream向管道中写入的数据.这两个类主要用来完成线程之间的通信.一个线程的PipedInputStream对象能够从另外一个线程的PipedOutputStream对象中读取数据,使用这组I/O流必须在多线程环境下.


实现原理:

PipedInputStream和PipedOutputStream的实现原理类似于"生产者-消费者"原理,PipedOutputStream是生产者,PipedInputStream
是消费者,在PipedInputStream中有一个buffer字节数组,默认大小为1024,作为缓冲区,存放"生产者"生产出来的产品.


/*
PipedOutputStream与PipedInputStream应用
Strawberry2013-5-5

*/
import java.io.*;

class PipedDemo
{
	public static void main(String[] args) throws Exception
	{
		PipedOutputStream out = new PipedOutputStream();
		PipedInputStream in = new PipedInputStream();
		out.connect(in);			//管道连接一起

		Write w = new Write(out);
		Read r = new Read(in);
		new Thread(w).start();
		new Thread(r).start();
	}

}
class Write implements Runnable		//可以理解为生产者
{
	private PipedOutputStream out;
	Write(PipedOutputStream out)
	{
		this.out = out;
	}
	public void run()
	{
		try
		{
			out.write("my~~".getBytes());	//向管道中写入数据,应为字节型
			out.close();
		}
		catch (IOException e)
		{
			throw new RuntimeException("error1!");
		}
	}
}
class Read implements Runnable	//可以理解为消费者
{
	private PipedInputStream in;
	Read(PipedInputStream in)
	{
		this.in = in;
	}
	public void run()
	{
		try
		{
			byte[] bt = new byte[1024];
			int len = in.read(bt);		//在管道中读取数据
			System.out.println(new String(bt, 0, len));
		}
		catch (IOException e)
		{
			throw new RuntimeException("error2!");
		}
	}
}


分享到:
评论

相关推荐

    PipedInputStream和PipedOutputStream_动力节点Java学院整理

    PipedInputStream和PipedOutputStream_动力节点Java学院整理

    JAVA IO流缓冲字节流缓冲字符流等流经典代码示例加注释总结.rar

    2、常用21个IO流:FileWriter、FileReader、CharArrayReader、CharArrayWriter、CharSequence、OutputStreamWriter、FileOutputStream、InputStreamReader、PrintWriter、BufferedReader、InputStream、...

    详解PipedInputStream和PipedOutputStream_动力节点Java学院整理

    主要为大家详细介绍了管道PipedInputStream和PipedOutputStream,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Java之IO流学习总结

    根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别: 读写...

    管道流PipedStream应用举例

    针对java中的管道流的应用的解析,包括PipedInputStream和PipedOutputStream。

    javaIO流原代码

    javaIO流原代码,刚刚开始学习java的同志们可以看看.有问题留言.

    IO体系.java

    |--PipedOutputStream/:可以将管道输出流连接到管道输入流来创建通信管道。 | 用方法connect(PipedInputStream snk) 将此管道输出流连接到接收者。 同样使用多线程技术,避免死锁。 |--ByteArrayOutputStream/:...

    JDK_API_1_6

    PipedInputStream 管道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的所有数据字节。 PipedOutputStream 可以将管道输出流连接到管道输入流来创建通信管道。 PipedReader 传送的字符输入流。 ...

    java管道流

    Listing 1:用管道流截取控制台输出】 PipedInputStream pipedIS = new PipedInputStream(); PipedOutputStream pipedOS = new PipedOutputStream(); try { pipedOS.connect(pipedIS); } catch(IOException e) { ...

    java IO章节的总结

    IO从大的方向上分为字节流和字符流,包括四个抽象类: 1、输入:Reader, InputStream类型的子类(字符,字节) 2、输出:Writer, OutputStream类型的子类(字符,字节) 决定使用哪个类以及它的构造进程的一般...

    举例讲解Java中Piped管道输入输出流的线程通信控制

    Java中的PipedWriter、PipedReader类管道的读写依赖于PipedOutputStream、PipedInputStream两个管道输入输出类,这里我们将来举例讲解Java中Piped管道输入输出流的线程通信控制:

    Java IO 流的操作

    包含了Java里面大部分的 流类的小实例Propertity FileReader FileWriter FileInputStream PipedInputStream..........

    教你彻底明白Java的IO系统

    在Java的IO中,所有的stream(包括Input和Out stream)都包括两种类型: 1.1 以字节为导向的stream 以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种...

    深刻理解java io

    4) PipedInputStream:实现了pipe的概念,主要在线程中使用 5) SequenceInputStream:把多个InputStream合并为一个InputStream 2) Out stream 1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中 2) ...

    Java程序设计语言期末试题

    在Java的IO中,所有的stream(包括Input和Out stream)都包括两种类型: 1.1 以字节为导向的stream 以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种...

    java-piped-streams-test

    此存储库用于演示java.io.PipedInputStream (Oracle Java 实现,存在于 1.7 和 1.8)中的错误。 这是一个最小的工作示例,用于证明PipedInputStream包含一个错误,该错误导致相应的PipedOutputStream等待最多...

    something:他山之石,可以攻玉

    集合I/O多线程NIOjava基础知识点整理jvmspring 相关MYSQL分布式存储检索java源码学习集合Linkedlist详解Vector详解Stack详解Map构架HashMap详解HashMap...OPipedOutputStream and PipedInputStream 详解BufferInputStream...

Global site tag (gtag.js) - Google Analytics