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 );

  

原文地址:https://www.cnblogs.com/gstsyyb/p/3774599.html