管道<I/O>流.我可以传递复杂的物体吗?

gst*_*low 3 java io concurrency

我调查了java I/O. 现在我正在读管道.

我写了最简单的代码示例:

PipedInputStream pipedInputStream = new PipedInputStream();
PipedOutputStream pipedOutputStream = new PipedOutputStream();

pipedOutputStream.connect(pipedInputStream);

pipedOutputStream.write(new byte[]{1});
System.out.println(pipedInputStream.read());
Run Code Online (Sandbox Code Playgroud)

我有以下问题.据我了解 - 在现实生活中传递字节是非常奇怪的.

例如,为了传递整个String,是否真的要扩展此示例?

m1o*_*1o2 6

是.使用ObjectInputStreamObjectOutputStream对其进行去除.

PipedOutputStream pipedOutputStream = new PipedOutputStream();
PipedInputStream pipedInputStream = new PipedInputStream();

pipedInputStream.connect(pipedOutputStream);

ObjectOutputStream objectOutputStream = new ObjectOutputStream(pipedOutputStream);
ObjectInputStream objectInputStream = new ObjectInputStream(pipedInputStream);

objectOutputStream.writeObject("Hello world!");
String message = (String)objectInputStream.readObject();

System.out.println(message);
Run Code Online (Sandbox Code Playgroud)

有关装饰模式的更多信息,特别是Java I/O流装饰,您可以在此StackOverFlow Post中找到

顺便说一下,确保在ObjectInputStream之前启动ObjectOutputStream,并在创建Object输入/输出流之前使用connect方法连接管道.
原因如下:http://frequal.com/java/OpenObjectOutputStreamFirst.html