/*
管道流:
PipedInputStream
void connect(PipedOutputStream src)
使此管道输入流连接到管道输出流 src
PipedOutputStream
void connect(PipedInputStream snk)
在JDK我们看到PipedInputStream中有管道缓冲区,用来接收数据
管道流内部在实现时还有大量的对同步数据的处理
管道输出流和管道输入流执行时不能互相阻塞,所以一般要开启独立线程分别执行
顺便复习了多线程操作
[示例]:管道流
*/
import java.io.*;
class Demo
{
public static void main(String[] args) throws Exception
{
PipedInputStream pin = new PipedInputStream();
PipedOutputStream pout = new PipedOutputStream();
pin.connect(pout); //输入流与输出流连接
ReadThread readTh = new ReadThread(pin);
WriteThread writeTh = new WriteThread(pout);
new Thread(readTh).start();
new Thread(writeTh).start();
}
public static void sop(Object obj) //打印
{
System.out.println(obj);
}
}
class ReadThread implements Runnable
{
private PipedInputStream pin;
ReadThread(PipedInputStream pin) //
{
this.pin=pin;
}
public void run() //由于必须要覆盖run方法,所以这里不能抛,只能try
{
try
{
sop("R:读取前没有数据,阻塞中...等待数据传过来再输出到控制台...");
byte[] buf = new byte[1024];
int len = pin.read(buf); //read阻塞
sop("R:读取数据成功,阻塞解除...");
String s= new String(buf,0,len);
sop(s); //将读取的数据流用字符串以字符串打印出来
pin.close();
}
catch(Exception e)
{
throw new RuntimeException("R:管道读取流失败!");
}
}
public static void sop(Object obj) //打印
{
System.out.println(obj);
}
}
class WriteThread implements Runnable
{
private PipedOutputStream pout;
WriteThread(PipedOutputStream pout)
{
this.pout= pout;
}
public void run()
{
try
{
sop("W:开始将数据写入:但等个5秒让我们观察...");
Thread.sleep(5000); //释放cpu执行权5秒
pout.write("W: writePiped 数据...".getBytes()); //管道输出流
pout.close();
}
catch(Exception e)
{
throw new RuntimeException("W:WriteThread写入失败...");
}
}
public static void sop(Object obj) //打印
{
System.out.println(obj);
}
}
编译成功,class文件运行结果:
R:读取前没有数据,阻塞中...等待数据传过来再输出到控制台...
W:开始将数据写入:但等个5秒让我们观察...
R:读取数据成功,阻塞解除...
W: writePiped 数据...
分享到:
相关推荐
PipedInputStream和PipedOutputStream_动力节点Java学院整理
Java管道流(PipedInputStream和PipedOutputStream)是Java I/O流的一部分,主要用于在不同的线程之间传递数据。它们提供了一种机制,使得一个线程可以写入数据,而另一个线程可以从管道读取这些数据,实现数据的...
在使用管道通信时,必须将PipedOutputStream和PipedInputStream配套使用。使用管道通信时,大致的流程是:我们在线程A中向PipedOutputStream中写入数据,这些数据会自动的发送到与PipedOutputStream对应的...
针对java中的管道流的应用的解析,包括PipedInputStream和PipedOutputStream。
管道流主要包括两个类:`PipedInputStream`和`PipedOutputStream`。通过这两个类,可以实现数据从一个线程到另一个线程的传输。 #### 管道流的基本概念 管道流是一种特殊的输入/输出流,它可以在两个线程之间传递...
通过将System.out和System.err的打印流替换为PipedOutputStream,我们可以确保所有输出都被重定向到管道流中,然后可以从PipedInputStream读取这些数据。 如【Listing 1】所示,创建一个PipedInputStream和...
管道流(PipedInputStream/PipedOutputStream)用于在不同的线程之间传递数据,构建数据管道。例如,一个线程可以将数据写入`PipedOutputStream`,另一个线程则可以从`PipedInputStream`读取。 6.9 对象流: Java的...
Java中的管道流是一种用于线程间通信的机制,它的核心思想是将一个线程的输出作为另一个线程的输入,...通过正确理解和使用PipedOutputStream和PipedInputStream,开发者可以构建出更加灵活、健壮的多线程应用程序。
本篇学习笔记主要聚焦于Java IO流的基本概念、分类、使用方法以及在实际开发中的应用。 一、Java IO流简介 Java IO流分为字符流和字节流两大类,它们都继承自抽象基类`java.io.InputStream`和`java.io.OutputStream...
管道流PipedInputStream和PipedOutputStream用于线程间通信,它们创建了一个数据通道,使得一个线程可以向管道写入数据,另一个线程可以从管道读取。 还有FileChannel和Selector等NIO(非阻塞I/O)组件,它们在高...
Java IO流分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理单个字符,而字节流处理8位的字节序列。它们又可以进一步细分为输入流(InputStream/Reader)和输出流(OutputStream/Writer)...
2、常用21个IO流:FileWriter、FileReader、CharArrayReader、CharArrayWriter、CharSequence、OutputStreamWriter、FileOutputStream、InputStreamReader、PrintWriter、BufferedReader、InputStream、...
在Java中,通过`java.io.PipedInputStream`和`java.io.PipedOutputStream`这两个类来实现线程间通信的管道。PipedInputStream作为输入端,PipedOutputStream作为输出端,两者之间建立连接,形成一个数据传输的通道。...
管道流主要由两个类组成:`PipedOutputStream`和`PipedInputStream`。`PipedOutputStream`是`OutputStream`的子类,用于输出数据,而`PipedInputStream`是`InputStream`的子类,用于读取数据。这两个类一起工作,...
管道流(PipedInputStream, PipedOutputStream, PipedReader, PipedWriter)允许两个线程之间直接传递数据,无需通过共享内存或线程同步。 8. **数据流**: 数据流(DataInputStream, DataOutputStream)提供了一...
- Java中的管道流是一种特殊类型的流,它允许数据从一个线程传输到另一个线程。它由`PipedInputStream`和`PipedOutputStream`组成。其中`PipedOutputStream`用于写入数据,而`PipedInputStream`则用于读取这些数据...
节点流:FileReader、FileWriter、FileInputStream、FileOutputStream、Memory Array、CharArrayReader、CharArrayWriter、ByteArrayInputStream、ByteArrayOutputStream、Memory String、StringReader、...
- PipedInputStream和PipedOutputStream允许在不同线程间传递数据,形成管道。 - 缓冲流(BufferedInputStream/BufferedReader等)在内部维护一个缓冲区,提高读写效率,减少对底层操作系统的调用次数。 四、转换流...
1. 字节流:Java的`java.io`包中提供了处理字节流的类,如`InputStream`和`OutputStream`作为所有字节输入流和输出流的基类。它们的子类如`FileInputStream`和`FileOutputStream`分别用于文件的读写。 2. 字符流:...