BufferedReader的详细用法及注意事项

对IO一直都不胜了解,平时也就那么用了,没出什么大问题,以前的Android项目与后台传输json时用过BufferedReader,并没有什么问题,今天写了一个TCP协议的小Dome发现一直接收不到客户端传递的消息,debug发现while循环一次之后,StringBuilder没有值了,一直想不明白为什么,求大神开解!!

出现了互相等待,客户端和服务器端都等待对方给自己发送消息,在客户端添加一个shutdownOutput(),就好了.

下面是代码

 package com.bw.test03;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TestTCP1 {

    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket accept = null;

        InputStream input = null;
        OutputStream output = null;

        BufferedReader read = null;
        PrintWriter write = null;
        PrintStream point = null;

        try {
            serverSocket = new ServerSocket(6666);

            accept = serverSocket.accept();
            System.out.println("连接成功");

            input = accept.getInputStream();
            output = accept.getOutputStream();

            read = new BufferedReader(new InputStreamReader(input));

            StringBuilder buffer = new StringBuilder();
            String str = "";

            while((str = read.readLine()) != null ) {
                buffer.append(str);
                System.out.println(buffer.toString()+2);
                point = new PrintStream(output);
                point.println(buffer.toString()+"  服务端收到请求");
            }
            System.out.println("收到客户端传来的请求:");
            System.out.println(buffer.toString());


            point = new PrintStream(output);
            point.println(buffer.toString()+"  服务端收到请求");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                write.close();
                read.close();

                output.close();
                input.close();

                accept.close();
                serverSocket.close();

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }
}

 package com.bw.test03;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TestTCP2 {

    public static void main(String[] args) {
        Socket socket = null;

        InputStream input = null;
        OutputStream output = null;

        BufferedReader read = null;
        PrintWriter write = null;
        PrintStream point = null;

        try {
            socket = new Socket("127.0.0.1", 6666);

            input = socket.getInputStream();
            output = socket.getOutputStream();


            point = new PrintStream(output);
            point.println("服务端收到请回复");

            read = new BufferedReader(new InputStreamReader(input));

            StringBuilder buffer = new StringBuilder();
            String str = "";

            while((str = read.readLine())!=null) {
                buffer.append(str);
                System.out.println(buffer.toString()+2);

            }
            System.out.println("收到服务端传来的响应:");
            System.out.println(buffer.toString());

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                write.close();
                read.close();

                output.close();
                input.close();

                socket.close();

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }
}

在while循环里的可以打印输出并且接收到了值,但是下面的就没有值了,我为新手一个,求解

这里是客户端与服务端接收数据时堵塞的详解

http://blog.csdn.net/dabing69221/article/details/17351881