介绍:不同的数据源之间通过建立管道进行数据通信。如图:

线程之间通信最好的方式就是采用管道机制,类似水管一样,水管可以对接,组合成各种具有过滤性质的管道,管道和线程灵活使用,可以提高效率。(Channel)信道复用机制。
class Recever implements Runnable { PipedInputStream inputStream; Recever(PipedInputStream inputStream) {
this.inputStream = inputStream;
} @Override
public void run() {
try {
while (true) {
byte[] buffers = new byte[512];
int len = inputStream.read(buffers); String s = new String(buffers, 0, len);
System.out.println("收到:" + s);
} // inputStream.close();
} catch (Exception e) { }
} }

  

class Sender implements Runnable {

		PipedOutputStream outputStream;

		Sender(PipedOutputStream outputStream) {
this.outputStream = outputStream;
} @Override
public void run() { try {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String msg = scanner.nextLine();
outputStream.write(msg.getBytes());
outputStream.flush();
} } catch (Exception e) {
e.printStackTrace();
}
} }

  

public static void main(String[] args) throws InterruptedException,
IOException { PipedInputStream in = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream(); in.connect(out);
new Thread(new Recever(in)).start();
new Thread(new Sender(out)).start();
}

  

//数据流的合并-读取几个文件的内容输入到下一个文件
InputStream in1 = new FileInputStream("c:/a1.txt");
InputStream in2 = new FileInputStream("c:/a2.txt");
InputStream in3 = new FileInputStream("c:/a3.txt"); Vector<InputStream> inputStreams = new Vector<InputStream>();
inputStreams.add(in1);
inputStreams.add(in2);
inputStreams.add(in3); Enumeration<? extends InputStream> enumeration = inputStreams.elements();
SequenceInputStream inputStream = new SequenceInputStream(enumeration ); OutputStream os = new FileOutputStream("c:/a4.txt");
byte[] buffer = new byte[512];
int length = -1;
while((length = inputStream.read(buffer))!=-1){
os.write(buffer, 0, length);
os.flush();
}
os.close();
inputStream.close();
//内存读取
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
arrayOutputStream.write("test".getBytes());
arrayOutputStream.flush(); byte[] buffer = arrayOutputStream.toByteArray();
ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(buffer );

  

java管道通信的更多相关文章

  1. java 多线程:线程通信-等待通知机制wait和notify方法;(同步代码块synchronized和while循环相互嵌套的差异);管道通信:PipedInputStream;PipedOutputStream;PipedWriter; PipedReader

    1.等待通知机制: 等待通知机制的原理和厨师与服务员的关系很相似: 1,厨师做完一道菜的时间不确定,所以厨师将菜品放到"菜品传递台"上的时间不确定 2,服务员什么时候可以取到菜,必 ...

  2. 第23章 java线程通信——生产者/消费者模型案例

    第23章 java线程通信--生产者/消费者模型案例 1.案例: package com.rocco; /** * 生产者消费者问题,涉及到几个类 * 第一,这个问题本身就是一个类,即主类 * 第二, ...

  3. 管道通信,王明学learn

    管道通信 一.通讯目的 1.数据传输 一个进程需要将数据发送给另一个进程. 2.资源共享 多个进程之间共享同样的资源. 3.通知事件 一个进程需要向另一个/组进程发送消息,通知它们发生了某事件. 4. ...

  4. PHP与Java进行通信

    缘起: 最近做了一个电商平台与网银整合的小东西,程序是开源的 Ecmall的,网银的接口也很规范,给出的文档很全,唯一的小问题是,网银使用的签名和验签的lib是只有java和c的,对java还熟悉一些 ...

  5. JAVA多线程通信

    JAVA多线程通信 package com.frank.thread; /** * author:pengyan * date:Jun 16, 2011 * file:ProducerAndCusto ...

  6. C#命名管道通信

    C#命名管道通信 最近项目中要用c#进程间通信,以前常见的方法包括RMI.发消息等.但在Windows下面发消息需要有窗口,我们的程序是一个后台运行程序,发消息不试用.RMI又用的太多了,准备用管道通 ...

  7. Linux下进程间管道通信小作业

    在进行这次作业之前,我们先来看看什么是管道吧! 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间, ...

  8. linux命名管道通信过程

    前一个道,这节学习命名管道. 二命名管道 无名管道仅仅能用来在父子进程或兄弟进程之间进行通信,这就给没有亲缘关系的进程之间数据的交换带来了麻烦.解决问题就是本节要学习的还有一种管道通信:命名管道. 命 ...

  9. Linux进程间通信(九)---综合实验之有名管道通信实验

    实验目的 通过编写有名管道多路通信实验,进一步掌握管道的创建.读写等操作,同时复习使用select()函数实现管道的通信. 实验内容 这里采用管道函数创建有名管道(不是在控制台下输入命令mknod), ...

随机推荐

  1. Android 自定义圆形旋转进度条,仿微博头像加载效果

    微博 App 的用户头像有一个圆形旋转进度条的加载效果,看上去效果非常不错,如图所示: 据说 Instagram 也采用了这种效果.最近抽空研究了一下,最后实现的效果是这样: 基本上能模拟出个大概,代 ...

  2. [C#] 网站程序ASP.NET的性能诊断 - CPU分析

    微软提供了标准的CLR性能分析类库 https://github.com/Microsoft/clrmd 这个类库是开源的代码.能够获取CLR runtime里面几乎所有的信息. 如何获取clrmd编 ...

  3. matlab一些函数

    1 addpath 路径(相对应地,rmpath移除路径) addpath ../commonaddpath ../common/minFunc_2012/minFuncaddpath ../comm ...

  4. caffe安装编译问题-ImportError: No module named skimage.io

    问题描述 >>> import caffe Traceback (most recent call last): File , in <module> File , in ...

  5. CTF之栅栏密码

    栅栏密码是比较常见的加密方式之一,其原理是将一组明文分成N组,将每一组的第一个明文取出按照顺序组成一串密文,并将这段密文附在第一段密文之后,以此类推 例如: 分了两组,即秘钥为2: 明文:THERE ...

  6. 数据库表结构转成设计书,PowerDesigner 表格导出为excel

    数据库中的表导入到PowerDesigner中并转为excel文档 1.打开PowerDesigner12,在菜单中按照如下方式进行操作 file->Reverse Engineer->D ...

  7. LG3372 【【模板】线段树 1】

    介绍我的三种算法 1.线段树 既然这题是线段树板子,我还是尊重一下先发这个.跑的时间376ms不是很快,但也还是不错.O(nlogn). #include<iostream> #inclu ...

  8. LG3377 【模板】左偏树(可并堆)

    好博客 1 2 上面那个用数组写的跑的快,且便于封装,就用他的代码了. 代码 #include<cstdlib> #include<cstdio> #include<cm ...

  9. smarty学习——变量调节器(过滤器)

    变量调节器用于变量,自定义函数和字符串. 请使用 | 符号和调节器名称应用调节器.变量调节器由赋予的参数值决定其行为.参数由:符号分开. 比如进行大写转换的: upper demo: <br&g ...

  10. gphoto2

    连上usb线,系统会跳出detect到camera的提示,这里一定要选择“unmount”,否则会面的命令执行会有问题 hjs@ubuntu:~$ gphoto2 --auto-detect Mode ...