管道<i o =“”>流。我可以传递复杂的物体吗?</i>

时间:2014-06-29 15:44:05

标签: java concurrency io

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

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

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

pipedOutputStream.connect(pipedInputStream);

pipedOutputStream.write(new byte[]{1});
System.out.println(pipedInputStream.read());

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

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

1 个答案:

答案 0 :(得分:5)

是。使用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);

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

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