Прошла задание Чат. Но чтобы лучше прочувствовать сокеты и компанию решила написать такой же чат сама с нуля. Решила пойти от простого к сложному и сначала написать сервер и одного клиента. Сервер принимает сообщения клиента, пока тот не введет ключевое слово. Сначала написала реализацию с помощью BufferedReader и BufferedWriter: Server:
ServerSocket serverSocket = new ServerSocket(8000);
       System.out.println("Server is started");
     //  while (true){
          Socket connection =  serverSocket.accept();
          System.out.println("client is connected " + connection.getRemoteSocketAddress());
          BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
          System.out.println("Start listening messages");
          String message = "";
          try {
              while (!message.equals("exit")) {
                  message = in.readLine();
                  System.out.println(message);
              }
          }catch (Exception e){

          }
          System.out.println("Connection is closed");
          in.close();
          connection.close();
       }
Client
Socket connection = new Socket("127.0.0.1",8000);
       System.out.println("Connected with server");
       BufferedWriter out = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
       BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
       System.out.println("Start Sending message");
       String message = "";
       while (!message.equals("exit")){
           System.out.println("Enter message");
           message = consoleReader.readLine();
           out.write(message);
       }
       out.close();
       System.out.println("Closing");
       connection.close();
После запуска сервера и клиента картина следующая: Клиент отправляет сообщения, сервер слушает и ничего не выводит, после того, как клиент ввел ключевое слово и поток out закрылся, сервер выдал все скопом, что писал клиент. Я уже подзабыла стримы и ридеры. Но такое поведение вроде бы понятно, по аналогии с файлом, мы не можем начать ридером читать из файла, пока райтер, пишущий в тот же файл не закончил работу, верно? Заменила ридеры на ObjectInputStream и ObjectOutPutStream,все стало работать красиво, клиент отправляет, очередное сообщение - сервер тут же печатает. Подскажите, почему в случае с ObjectInputStream сервер не ждет закрытие потока out?