簡體   English   中英

將流更改為Java套接字

[英]change stream to java socket

我需要在運行時更改套接字流。 首先,我需要使用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時。

我認為您不需要關閉流。 我已經編寫了一個使用文件系統和PrintStream的示例,但它與套接字和輸出流應該相同。

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

public class TestStream {
    public static void main (String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("test.txt");
        PrintStream p1 = new PrintStream(fos, false);
        PrintStream p2 = new PrintStream(fos, false);
        p1.print("Test");
        p1.flush();
        p2.print(100);
        p2.flush();
        fos.close();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM