将流更改为java套接字

时间:2016-02-20 17:06:43

标签: java sockets stream

我需要通过运行时更改我的套接字流。 首先,我需要使用ObjectStreams:

Socket socket = ...
InputStream networkInput = socket.getInputStream();
OutputStream networkOutput = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(networkOutput);
oos.flush();
ObjectInputStream ois = new ObjectInputStream(networkInput);
//use the object-streams

然后我需要更改为其他一些流

oos.close();
ois.close();
XYOutputStream xyos = new XYOutputStream(networkOutput);
xyos.flush();
XYInputStream xyis = new XYInputStream(networkInput);

但是,如果我使用上面的代码,套接字将关闭,我得到一个

java.net.SocketException: Socket closed

如果我使用

socket.shutdownInput();
socket.shutdownOutput();

而不是关闭旧流我得到了

java.net.SocketException: interrupted data transfer (broken pipe)

当我尝试初始化我的XYStreams时。

1 个答案:

答案 0 :(得分:0)

我认为你不需要关闭流。 我编写了一个使用文件系统和PrintStream的示例,但它应该与套接字和输出流相同。

{{1}}