⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loopedstreams.java

📁 控制台数据截取,(哎,还要打满20个字,麻烦)
💻 JAVA
字号:
import java.io.*;

public class LoopedStreams {
	private PipedOutputStream pipedOS = 
		new PipedOutputStream();
	private boolean keepRunning = true;
	private ByteArrayOutputStream byteArrayOS =
		new ByteArrayOutputStream() {
		public void close() {
			keepRunning = false;
			try {
				super.close();
				pipedOS.close();
			}
			catch(IOException e) {
				// 记录错误或其他处理
				// 为简单计,此处我们直接结束
				System.exit(1);
			}
		}
	};


	private PipedInputStream pipedIS = new PipedInputStream() {
		public void close() {
			keepRunning = false;
			try	{
				super.close();
			}
			catch(IOException e) {
				// 记录错误或其他处理
				// 为简单计,此处我们直接结束
				System.exit(1);
			}
		}
	};


	public LoopedStreams() throws IOException {
		pipedOS.connect(pipedIS);
		startByteArrayReaderThread();
	} // LoopedStreams()


	public InputStream getInputStream() {
		return pipedIS;
	} // getInputStream()


	public OutputStream getOutputStream() {
		return byteArrayOS;
	} // getOutputStream()


	private void startByteArrayReaderThread() {
		new Thread(new Runnable() {
			public void run() {
				while(keepRunning) {
					// 检查流里面的字节数
					if(byteArrayOS.size() > 0) {
						byte[] buffer = null;
						synchronized(byteArrayOS) {
							buffer = byteArrayOS.toByteArray();
							byteArrayOS.reset(); // 清除缓冲区
						}
						try {
							// 把提取到的数据发送给PipedOutputStream
							pipedOS.write(buffer, 0, buffer.length);
						}
						catch(IOException e) {
							// 记录错误或其他处理
							// 为简单计,此处我们直接结束
							System.exit(1);
						}
					}
					else // 没有数据可用,线程进入睡眠状态
						try {
							// 每隔1秒查看ByteArrayOutputStream检查新数据
							Thread.sleep(1000);
						}
						catch(InterruptedException e) {}
					}
			 }
		}).start();
	} // startByteArrayReaderThread()
} // LoopedStreams

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -