-------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学院整理
2、常用21个IO流:FileWriter、FileReader、CharArrayReader、CharArrayWriter、CharSequence、OutputStreamWriter、FileOutputStream、InputStreamReader、PrintWriter、BufferedReader、InputStream、...
主要为大家详细介绍了管道PipedInputStream和PipedOutputStream,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别: 读写...
针对java中的管道流的应用的解析,包括PipedInputStream和PipedOutputStream。
javaIO流原代码,刚刚开始学习java的同志们可以看看.有问题留言.
|--PipedOutputStream/:可以将管道输出流连接到管道输入流来创建通信管道。 | 用方法connect(PipedInputStream snk) 将此管道输出流连接到接收者。 同样使用多线程技术,避免死锁。 |--ByteArrayOutputStream/:...
PipedInputStream 管道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的所有数据字节。 PipedOutputStream 可以将管道输出流连接到管道输入流来创建通信管道。 PipedReader 传送的字符输入流。 ...
Listing 1:用管道流截取控制台输出】 PipedInputStream pipedIS = new PipedInputStream(); PipedOutputStream pipedOS = new PipedOutputStream(); try { pipedOS.connect(pipedIS); } catch(IOException e) { ...
IO从大的方向上分为字节流和字符流,包括四个抽象类: 1、输入:Reader, InputStream类型的子类(字符,字节) 2、输出:Writer, OutputStream类型的子类(字符,字节) 决定使用哪个类以及它的构造进程的一般...
Java中的PipedWriter、PipedReader类管道的读写依赖于PipedOutputStream、PipedInputStream两个管道输入输出类,这里我们将来举例讲解Java中Piped管道输入输出流的线程通信控制:
包含了Java里面大部分的 流类的小实例Propertity FileReader FileWriter FileInputStream PipedInputStream..........
在Java的IO中,所有的stream(包括Input和Out stream)都包括两种类型: 1.1 以字节为导向的stream 以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种...
4) PipedInputStream:实现了pipe的概念,主要在线程中使用 5) SequenceInputStream:把多个InputStream合并为一个InputStream 2) Out stream 1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中 2) ...
在Java的IO中,所有的stream(包括Input和Out stream)都包括两种类型: 1.1 以字节为导向的stream 以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种...
此存储库用于演示java.io.PipedInputStream (Oracle Java 实现,存在于 1.7 和 1.8)中的错误。 这是一个最小的工作示例,用于证明PipedInputStream包含一个错误,该错误导致相应的PipedOutputStream等待最多...
集合I/O多线程NIOjava基础知识点整理jvmspring 相关MYSQL分布式存储检索java源码学习集合Linkedlist详解Vector详解Stack详解Map构架HashMap详解HashMap...OPipedOutputStream and PipedInputStream 详解BufferInputStream...