我应该在ServerSocket / Socket中一次只创建一个`ObjectOutputStream`和`ObjectInputStream`吗?

时间:2018-02-08 11:29:34

标签: java sockets serversocket

假设我有一个ServerClient,其中包含以下任务:

  
      
  • 验证(发送和接收验证码)
  •   
  • 继续接收消息
  •   
  • 继续发送心跳消息
  •   

我把它编码为:

public class Sample{

    /** Some code here... **/

    //Everything start in authentication() method.
    private void authenticate(){
        //...
        List<Object> msg = new ArrayList<>();
        ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
        msg.add(0, AUTHENTICATION);
        msg.add(1, id);
        output.writeObject(msg);
        output.flush();
        output.reset();

        ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
        msg.addAll((Collection<?>) input.readObject());
        input.reset();

        /** Validate **/
        if(AUTHENTICATION_IS_TRUE){
            startSendingHeartBeat();
            startReceivingMessage();
        }
    }

    private void startSendingHeartBeat(){
        //...
        List<Object> msg = new ArrayList<>();
        ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
        while(true){
            msg.clear();
            msg.add(0, "XXX");
            msg.add(1, id);
            output.writeObject(msg);
            output.flush();
            output.reset();
        }
    }

    private void startReceivingMessage(){
        //...
        List<Object> msg = new ArrayList<>();
        ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
        while(true){
           msg.clear();
           msg.addAll((Collection<?>) input.readObject());
           input.reset();
        }
    }
}

如您所见,我为3种方法创建了ObjectOutputStreamObjectInputStream

这是个坏主意吗?我应该只声明并初始化一个ObjectOutputStream / ObjectInputStream并在每次需要时使用它吗?

我还没有遇到任何问题,但我有疑问。

0 个答案:

没有答案