zoukankan      html  css  js  c++  java
  • java管道通信

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

    线程之间通信最好的方式就是采用管道机制,类似水管一样,水管可以对接,组合成各种具有过滤性质的管道,管道和线程灵活使用,可以提高效率。(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 );

      

  • 相关阅读:
    搞笑的口误 [调剂一下生活 :D]
    Win 2003远程管理的实现
    asp.net 实现购物车(DataSet)详细代码[转]
    SQL Server:定时作业的设置方法
    URL Rewrite
    Asp.net 2.0 C#实现压缩/解压功能 [转=向作者‘肖相’无私共享精神致敬]
    网站的赢利模式 从只看排名流量中解脱出来[转]
    一些.net的工具[转]
    Expression孟岩
    sql作业,执行表间数据导入的实验
  • 原文地址:https://www.cnblogs.com/gstsyyb/p/3774599.html
Copyright © 2011-2022 走看看